weizhengliang пре 2 година
родитељ
комит
197940bcf7
92 измењених фајлова са 2111 додато и 743 уклоњено
  1. 2 2
      app/src/main/AndroidManifest.xml
  2. 16 0
      app/src/main/java/com/wdkl/app/ncs/application/NcsApplication.kt
  3. 1 1
      build.gradle
  4. 5 0
      common/src/main/java/com/wdkl/ncs/android/lib/utils/ExtendMethods.kt
  5. 0 2
      home/src/main/AndroidManifest.xml
  6. 9 12
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/AppUpdateActivity.kt
  7. 6 0
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/BaseActivity.kt
  8. 15 7
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/ChannelImActivity.kt
  9. 16 11
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/ContactUpdateActivity.kt
  10. 5 4
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/NewEventListActivity.kt
  11. 4 4
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/SmsReceivedActivity.kt
  12. 2 2
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/TakeoverActivity.kt
  13. 15 8
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/VoiceMsgActivity.kt
  14. 4 4
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt
  15. 2 2
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchContactsActivity.kt
  16. 0 339
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchEventDetailActivity.kt
  17. 70 42
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt
  18. 56 7
      home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java
  19. 1 1
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/ChannelImItemAdapter.kt
  20. 6 6
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt
  21. 22 19
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt
  22. 22 17
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt
  23. 13 10
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt
  24. 2 7
      home/src/main/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt
  25. 11 2
      home/src/main/code/com/wdkl/ncs/android/component/home/broadcast/BatteryBroadcastReceiver.java
  26. 0 2
      home/src/main/code/com/wdkl/ncs/android/component/home/di/HomeComponent.kt
  27. 3 3
      home/src/main/code/com/wdkl/ncs/android/component/home/service/FloatingService.java
  28. 3 2
      home/src/main/code/com/wdkl/ncs/android/component/home/service/PhoneStateReceiver.java
  29. 34 12
      home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt
  30. 22 0
      home/src/main/code/com/wdkl/ncs/android/component/home/settingconfig/SettingConfig.java
  31. 8 2
      home/src/main/code/com/wdkl/ncs/android/component/home/ui/CallSingleActivity.java
  32. 10 5
      home/src/main/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java
  33. 15 15
      home/src/main/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java
  34. 140 0
      home/src/main/code/com/wdkl/ncs/android/component/home/util/LanguageSetDialogHelper.java
  35. 83 0
      home/src/main/code/com/wdkl/ncs/android/component/home/util/LocaleMangerUtils.java
  36. 2 2
      home/src/main/code/com/wdkl/ncs/android/component/home/util/PasswordDialogHelper.java
  37. 4 3
      home/src/main/code/com/wdkl/ncs/android/component/home/util/PhoneNumberDialogHelper.java
  38. 29 13
      home/src/main/code/com/wdkl/ncs/android/component/home/util/RecordHelper.java
  39. 3 3
      home/src/main/code/com/wdkl/ncs/android/component/home/util/ServerConfigDialogHelper.java
  40. 3 2
      home/src/main/code/com/wdkl/ncs/android/component/home/util/SoundPoolManager.java
  41. 2 2
      home/src/main/res/layout/activity_app_update.xml
  42. 1 1
      home/src/main/res/layout/activity_channel_im_list.xml
  43. 1 1
      home/src/main/res/layout/activity_contact_update.xml
  44. 2 2
      home/src/main/res/layout/activity_sip_voip_audio.xml
  45. 3 3
      home/src/main/res/layout/activity_sip_voip_audio_ringing.xml
  46. 5 5
      home/src/main/res/layout/activity_sms_received.xml
  47. 1 1
      home/src/main/res/layout/activity_sos_emergency_call.xml
  48. 1 1
      home/src/main/res/layout/activity_takeover.xml
  49. 1 1
      home/src/main/res/layout/activity_voice_msg.xml
  50. 2 2
      home/src/main/res/layout/activity_web_rtc_voip_audio.xml
  51. 3 3
      home/src/main/res/layout/activity_web_rtc_voip_audio_ringing.xml
  52. 2 2
      home/src/main/res/layout/adapter_client_list.xml
  53. 11 11
      home/src/main/res/layout/adapter_watch_contacts_item.xml
  54. 3 3
      home/src/main/res/layout/av_p2p_audio_incoming.xml
  55. 3 3
      home/src/main/res/layout/av_p2p_audio_outgoing.xml
  56. 3 3
      home/src/main/res/layout/av_p2p_video_connected_action.xml
  57. 3 3
      home/src/main/res/layout/av_p2p_video_incoming_action.xml
  58. 2 2
      home/src/main/res/layout/av_p2p_video_outgoing_action.xml
  59. 1 1
      home/src/main/res/layout/back_layout.xml
  60. 3 3
      home/src/main/res/layout/event_list_item.xml
  61. 1 1
      home/src/main/res/layout/float_call_window_layout.xml
  62. 1 1
      home/src/main/res/layout/fragment_audio.xml
  63. 1 1
      home/src/main/res/layout/fragment_video.xml
  64. 2 2
      home/src/main/res/layout/im_dialog_lay.xml
  65. 1 1
      home/src/main/res/layout/im_play_dialog_lay.xml
  66. 89 0
      home/src/main/res/layout/language_set_dialog.xml
  67. 4 4
      home/src/main/res/layout/password_dialog_lay.xml
  68. 7 7
      home/src/main/res/layout/phone_num_dialog_lay.xml
  69. 6 6
      home/src/main/res/layout/server_config_dialog_lay.xml
  70. 9 0
      home/src/main/res/layout/spinner_item.xml
  71. 9 7
      home/src/main/res/layout/takeover_item.xml
  72. 124 32
      home/src/main/res/layout/user_setting_layout.xml
  73. 2 2
      home/src/main/res/layout/watch_activity_dialing_voice.xml
  74. 7 7
      home/src/main/res/layout/watch_activity_event.xml
  75. 3 3
      home/src/main/res/layout/watch_activity_event_detail.xml
  76. 11 10
      home/src/main/res/layout/watch_activity_home2.xml
  77. 18 14
      home/src/main/res/layout/watch_activity_register.xml
  78. 3 3
      home/src/main/res/layout/watch_activity_voice_calls.xml
  79. 5 5
      keepalive/src/main/java/com/wdkl/ncs/keepbackground/utils/ForegroundNotificationUtils.java
  80. 10 0
      middleware/src/main/code/com/wdkl/ncs/android/middleware/model/ServerIpInfo.java
  81. 9 9
      middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/ContactHelper.java
  82. 10 0
      middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/StringUtil.java
  83. BIN
      resource/src/main/res/raw/im_start.wav
  84. BIN
      resource/src/main/res/raw/low_battery.wav
  85. 47 0
      resource/src/main/res/values-es/arrays.xml
  86. 231 0
      resource/src/main/res/values-es/strings.xml
  87. 47 0
      resource/src/main/res/values-ru/arrays.xml
  88. 231 0
      resource/src/main/res/values-ru/strings.xml
  89. 47 0
      resource/src/main/res/values-zh/arrays.xml
  90. 231 0
      resource/src/main/res/values-zh/strings.xml
  91. 47 0
      resource/src/main/res/values/arrays.xml
  92. 181 2
      resource/src/main/res/values/strings.xml

+ 2 - 2
app/src/main/AndroidManifest.xml

@@ -35,8 +35,8 @@
 
     <application
         android:allowBackup="true"
-        android:icon="@mipmap/launcher"
-        android:label="维鼎移动"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/wdkl_app_name"
         android:supportsRtl="true"
         tools:replace="android:label"
         tools:remove="android:requestLegacyExternalStorage"

+ 16 - 0
app/src/main/java/com/wdkl/app/ncs/application/NcsApplication.kt

@@ -1,9 +1,13 @@
 package com.wdkl.app.ncs.application
 
+import android.content.Context
+import android.content.res.Configuration
 import com.enation.javashop.android.jrouter.JRouter
 import com.enation.javashop.net.engine.config.NetEngineConfig
 import com.enation.javashop.net.engine.plugin.exception.RestfulExceptionInterceptor
 import com.enation.javashop.utils.base.config.BaseConfig
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils
 import com.wdkl.ncs.android.lib.base.BaseApplication
 
 class NcsApplication : BaseApplication() {
@@ -36,4 +40,16 @@ class NcsApplication : BaseApplication() {
             .addNetInterceptor(RestfulExceptionInterceptor())
 
     }
+
+    override fun attachBaseContext(base: Context?) {
+        val languageId: Int = SettingConfig.getLanguageId(base)
+        LocaleMangerUtils.setApplicationLanguageByIndex(base, languageId)
+        super.attachBaseContext(base)
+    }
+
+    override fun onConfigurationChanged(newConfig: Configuration) {
+        super.onConfigurationChanged(newConfig)
+        val languageId: Int = SettingConfig.getLanguageId(baseContext)
+        LocaleMangerUtils.setApplicationLanguageByIndex(baseContext, languageId)
+    }
 }

+ 1 - 1
build.gradle

@@ -15,7 +15,7 @@ buildscript {
     /**
      * SDK最小支持版本
      */
-    ext.min_sdk_version = 23
+    ext.min_sdk_version = 24
 
     /**
      * SDK目标支持版本

+ 5 - 0
common/src/main/java/com/wdkl/ncs/android/lib/utils/ExtendMethods.kt

@@ -96,6 +96,11 @@ fun showMessage(message: String) {
     }
 }
 
+fun showMessage(resId: Int) {
+    val msg = BaseApplication.appContext.getString(resId)
+    showMessage(msg)
+}
+
 /**
  * @author  LDD
  * @From   com.wdkl.ncs.android.lib.utils ExtendMethods.kt

+ 0 - 2
home/src/main/AndroidManifest.xml

@@ -32,10 +32,8 @@
         android:allowBackup="true"
         android:supportsRtl="true">
 
-        <!--<activity android:screenOrientation="portrait" android:name=".activity.WatchHome2Activity"/>-->
         <activity android:screenOrientation="portrait" android:name=".activity.WatchContactsActivity" />
         <activity android:screenOrientation="portrait" android:name=".activity.WatchCallRecordsActivity" />
-        <activity android:screenOrientation="portrait" android:name=".activity.WatchEventDetailActivity" />
         <activity android:screenOrientation="portrait" android:name=".activity.WatchUserSettingActivity" />
         <activity android:screenOrientation="portrait" android:name=".activity.TakeoverActivity" />
         <activity android:screenOrientation="portrait" android:name=".activity.AppUpdateActivity" />

+ 9 - 12
home/src/main/code/com/wdkl/ncs/android/component/home/activity/AppUpdateActivity.kt

@@ -69,12 +69,12 @@ class AppUpdateActivity : BaseActivity<AppUpdatePresenter, ActivityAppUpdateBind
             if (!TextUtils.isEmpty(appInfo.appPath)) {
                 downLoadAPK(ApiManager.urlManager.device_url + appInfo.appPath)
             } else {
-                showMessage("下载路径异常")
+                showMessage(R.string.download_error)
                 finish()
             }
         } else {
-            showMessage("本机已是最新版本: $versionCode")
-            activity_calling_bed_text_download.text = "本机已是最新版本: $versionCode"
+            showMessage(R.string.update_no_required)
+            activity_calling_bed_text_download.setText(R.string.update_no_required)
             activity_appupdate_dialog_progressview.visibility = View.GONE
             WdKeepAliveService.updateLastTime = System.currentTimeMillis() / 1000
             AppTool.Time.delay(1000){
@@ -97,9 +97,9 @@ class AppUpdateActivity : BaseActivity<AppUpdatePresenter, ActivityAppUpdateBind
         activity_appupdate_dialog_progressview.setCurProgress(0)
         HttpHelper.download(url, object : HttpHelper.DownloadListener {
             override fun onDownloadSuccess() {
-                Log.d("download", "onDownloadSuccess==" + "成功")
+                Log.d("download", "onDownloadSuccess==")
                 runOnUiThread {
-                    activity_calling_bed_text_download.text = "正在安装,请稍后..."
+                    activity_calling_bed_text_download.setText(R.string.updating)
                 }
                 startInstallApk()
             }
@@ -111,7 +111,7 @@ class AppUpdateActivity : BaseActivity<AppUpdatePresenter, ActivityAppUpdateBind
             }
 
             override fun onDownloadFailed() {
-                Log.d("download", "onDownloadFailed==" + "失败")
+                Log.d("download", "onDownloadFailed==")
                 finish()
             }
         })
@@ -122,18 +122,15 @@ class AppUpdateActivity : BaseActivity<AppUpdatePresenter, ActivityAppUpdateBind
             AppUpdateHelper.updateApp(this, object : AppUpdateHelper.UpdateCallBack {
                 override fun onFailed() {
                     runOnUiThread {
-                        showMessage("升级失败")
+                        showMessage(R.string.update_fail)
                         finish()
                     }
                 }
 
                 override fun onSuccess() {
                     runOnUiThread {
-                        showMessage("升级成功")
+                        showMessage(R.string.update_success)
                         finish()
-                        //有root权限用这个
-//                        android.os.Process.killProcess(android.os.Process.myPid())
-//                        System.exit(0)
                     }
                 }
             })
@@ -157,7 +154,7 @@ class AppUpdateActivity : BaseActivity<AppUpdatePresenter, ActivityAppUpdateBind
 
     //数据加载错误
     override fun onError(message: String, type: Int) {
-        showMessage("获取升级数据失败")
+        showMessage(message)
         finish()
     }
 

+ 6 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/activity/BaseActivity.kt

@@ -14,6 +14,8 @@ import androidx.databinding.DataBindingUtil
 import androidx.databinding.ViewDataBinding
 import com.enation.javashop.android.jrouter.JRouter
 import com.enation.javashop.utils.base.tool.BaseToolActivity
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils
 import com.wdkl.ncs.android.lib.base.*
 import com.wdkl.ncs.android.lib.utils.debugLog
 import com.wdkl.ncs.android.lib.utils.errorLog
@@ -79,6 +81,10 @@ abstract class BaseActivity<PresenterType : BaseContract.BasePresenter, DataBind
      * @Note   Activity创建时进行相关的配置
      */
     override fun onCreate(savedInstanceState: Bundle?) {
+        //切换语言
+        val languageId: Int = SettingConfig.getLanguageId(this)
+        LocaleMangerUtils.setApplicationLanguageByIndex(this, languageId)
+
         try {
             JRouter.prepare().inject(this)
         }catch (e :Exception){

+ 15 - 7
home/src/main/code/com/wdkl/ncs/android/component/home/activity/ChannelImActivity.kt

@@ -32,6 +32,8 @@ import okhttp3.RequestBody
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import java.io.File
+import java.util.*
+import kotlin.collections.ArrayList
 
 class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImListBinding>(), ChannelImContract.View, ChannelImItemAdapter.CallBack {
 
@@ -47,6 +49,8 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
     var cancel : Boolean = false
     var voiceFile : String? = null
 
+    private var language = "zh"
+
     lateinit var wakeLock : PowerManager.WakeLock
 
     override fun getLayId(): Int {
@@ -83,6 +87,8 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         if (RecordHelper.getInstance().isRecording()) {
             IMDialogHelper.showIMDialog(activity)
         }
+
+        language = LocaleMangerUtils.getApplicationLocale().language
     }
 
     override fun bindEvent() {
@@ -109,7 +115,7 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
                     MediaPlayHelper.getInstance().stopMusic(true)
                     //EventBus.getDefault().post(MessageEvent(false, Constants.EVENT_CLEAR_IM))
                     RecordHelper.getInstance().startRecord()
-                    tv_channel_text.text = "松开留言,上滑取消"
+                    tv_channel_text.setText(R.string.str_voice_msg_btn_title)
                     voiceFile = RecordHelper.getInstance().audiofilePath
 
                     //按下时保持常亮
@@ -126,14 +132,14 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
                 MotionEvent.ACTION_UP -> {
                     upTime = System.currentTimeMillis()
                     RecordHelper.getInstance().stopRecord()
-                    tv_channel_text.text = "按住说话"
+                    tv_channel_text.setText(R.string.str_voice_msg_btn_text)
 
                     if (Math.abs(upTime - downTime) <= 1000) {
                         RecordHelper.getInstance().deleteAudioFile(voiceFile)
-                        showMessage("说话时间太短")
+                        showMessage(R.string.str_voice_msg_record_loss)
                     } else if(cancel) {
                         RecordHelper.getInstance().deleteAudioFile(voiceFile)
-                        showMessage("语音留言已取消")
+                        showMessage(R.string.str_voice_msg_record_cancel)
                     } else {
                         //上传语音留言
                         if (voiceFile != null) {
@@ -164,13 +170,15 @@ class ChannelImActivity : BaseActivity<ChannelImPresenter, ActivityChannelImList
         val tcpModel = ChannelImUtil.channelImMsg(deviceId, channelImDO)
         instance.sendMsg(tcpModel.toJson()).subscribe { it: Boolean ->
             if (it) {
-                SoundPoolManager.getInstance().playSound(3)
-                showMessage("留言发送成功!")
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SoundPoolManager.getInstance().playSound(3)
+                }
+                showMessage(R.string.str_voice_msg_send_success)
                 //刷新列表
                 page = 1
                 presenter.getChannelIm(page, page_size, memberId!!, channelId)
             } else {
-                showMessage("留言发送失败!")
+                showMessage(R.string.str_voice_msg_send_fail)
             }
         }
     }

+ 16 - 11
home/src/main/code/com/wdkl/ncs/android/component/home/activity/ContactUpdateActivity.kt

@@ -9,6 +9,7 @@ import com.wdkl.ncs.android.component.home.R
 import com.wdkl.ncs.android.component.home.adapter.ContactUpdateAdapter
 import com.wdkl.ncs.android.component.home.databinding.ActivityContactUpdateBinding
 import com.wdkl.ncs.android.component.home.launch.HomeLaunch
+import com.wdkl.ncs.android.lib.base.BaseApplication
 import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.lib.vo.MessageEvent
 import com.wdkl.ncs.android.middleware.common.Constants
@@ -53,13 +54,13 @@ class ContactUpdateActivity: BaseActivity<WatchHomeActivityPresenter, ActivityCo
         update_contact_list.layoutManager = virtualLayoutManager
 
         if (Constants.deviceId > 0) {
-            tv_contact_title.text = "开始获取联系人..."
+            tv_contact_title.setText(R.string.contact_start_load)
             presenter.getWatchContacts(Constants.deviceId)
-            showMessage("开始更新,可能花费几分钟时间")
+            showMessage(R.string.contact_start_update)
         } else {
-            tv_contact_title.text = "获取联系人失败,设备可能未注册"
+            tv_contact_title.setText(R.string.device_not_registered)
             tv_contact_title.setTextColor(Color.RED)
-            showMessage("设备可能未注册...")
+            showMessage(R.string.device_not_registered)
         }
     }
 
@@ -97,15 +98,17 @@ class ContactUpdateActivity: BaseActivity<WatchHomeActivityPresenter, ActivityCo
     }
 
     override fun setContact(contactsVOs: List<WatchContactVO>) {
-        tv_contact_title.text = "获取到" + contactsVOs.size + "个联系人"
+        tv_contact_title.text = getString(R.string.contact_load_count, contactsVOs.size)
         tv_contact_title.setTextColor(Color.GREEN)
         if (contactsVOs.size > 0) {
-            var list = ArrayList<String>()
+            val list = ArrayList<String>()
             for (contact in contactsVOs) {
-                val str = "联系人名称: " + contact.name + ", 号码: " + contact.phoneNumber
+                val str = getString(R.string.contact_list_item, contact.name, contact.phoneNumber)
                 list.add(str)
             }
-            list.add("\n开始更新...\n")
+            list.add("\n")
+            list.add(getString(R.string.contact_updating))
+            list.add("\n")
             adapter.data.addAll(list)
             adapter.notifyDataSetChanged()
 
@@ -125,9 +128,11 @@ class ContactUpdateActivity: BaseActivity<WatchHomeActivityPresenter, ActivityCo
                         runOnUiThread {
                             progress_contact_update.setCurProgress(progress)
                             if (progress == 100) {
-                                tv_contact_update_progress.setText("更新完成: " + progress + "%")
+                                val text = getString(R.string.contact_update_complete)
+                                tv_contact_update_progress.setText(text + progress + "%")
                             } else {
-                                tv_contact_update_progress.setText("正在更新: " + progress + "%")
+                                val text = getString(R.string.contact_update_porgress)
+                                tv_contact_update_progress.setText(text + progress + "%")
                             }
                         }
                     }
@@ -163,7 +168,7 @@ class ContactUpdateActivity: BaseActivity<WatchHomeActivityPresenter, ActivityCo
 
     override fun onBackPressed() {
         if (System.currentTimeMillis() - clickTime > 2000) {
-            showMessage("再按一次退出")
+            showMessage(R.string.click_twice_to_back)
         } else {
             ContactHelper.exitUpdateContact()
             super.onBackPressed()

+ 5 - 4
home/src/main/code/com/wdkl/ncs/android/component/home/activity/NewEventListActivity.kt

@@ -149,7 +149,7 @@ class NewEventListActivity : BaseActivity<NewEventListPresenter, ActivityEventLi
 
     override fun onBackPressed() {
         if (!Constants.oldEvent) {
-            showMessage("您还有事件未处理")
+            showMessage(R.string.str_event_handle_warning)
         } else {
             super.onBackPressed()
         }
@@ -161,14 +161,14 @@ class NewEventListActivity : BaseActivity<NewEventListPresenter, ActivityEventLi
             if (mVibrator!=null) mVibrator.cancel()
             val resTcpModel = messageEvent.getMessage() as TcpModel
             if (resTcpModel.type === TcpType.CALLBACK && resTcpModel.action === TcpAction.VoiceAction.FAILED) {
-                showMessage("呼叫失败,可能对方不在线")
+                showMessage(R.string.call_failed)
                 dismissDialog()
             }
         } else if (messageEvent.tag == 2) {
             if (mVibrator!=null) mVibrator.cancel()
             val resTcpModel = messageEvent.getMessage() as TcpModel
             if (resTcpModel.action == TcpAction.VoiceAction.CALLING) {
-                showMessage("对方通话中")
+                showMessage(R.string.call_busy)
             }
         } else if (messageEvent.tag == 4) {
             val resTcpModel = messageEvent.getMessage() as TcpModel
@@ -177,7 +177,8 @@ class NewEventListActivity : BaseActivity<NewEventListPresenter, ActivityEventLi
                     dismissDialog()
                     if (mVibrator!=null) mVibrator.cancel()
                     val responseInteractionVO = Gson().fromJson(resTcpModel.data.toString(), InteractionVO::class.java)
-                    showMessage("已响应"+responseInteractionVO.fromFrameFullName + " " + responseInteractionVO.data)
+                    val text = getString(R.string.str_event_response, responseInteractionVO.fromFrameFullName, responseInteractionVO.data)
+                    showMessage(text)
 
                     var doFinish = false
                     var iterator = Constants.eventList.iterator()

+ 4 - 4
home/src/main/code/com/wdkl/ncs/android/component/home/activity/SmsReceivedActivity.kt

@@ -37,7 +37,7 @@ class SmsReceivedActivity : Activity() {
         val address = intent.getStringExtra("address")
         val data = intent.getStringExtra("sms_data")
 
-        tv_sms_title.text = "短信来自: " + address
+        tv_sms_title.text = "SMS from: " + address
         tv_sms_reply.text = data
 
         //提取手机号
@@ -59,14 +59,14 @@ class SmsReceivedActivity : Activity() {
                 val tcpModel = DeviceUtil.deviceConnect2(Constants.Companion.imei, phoneNo)
                 NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
                     if (it) {
-                        showMessage("更新成功!")
+                        showMessage(R.string.device_number_update_success)
                     } else {
-                        showMessage("更新失败!")
+                        showMessage(R.string.device_number_update_failed)
                     }
                 }
                 finish()
             } else {
-                showMessage("号码不能为空!")
+                showMessage(R.string.device_number_update_empty)
             }
         }
     }

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/activity/TakeoverActivity.kt

@@ -156,9 +156,9 @@ class TakeoverActivity: BaseActivity<TakeoverPresenter, ActivityTakeoverBinding>
         if (messageEvent.tag == 2) {
             val resTcpModel = messageEvent.getMessage() as TcpModel
             if (resTcpModel.action  == TcpAction.VoiceAction.FAILED){
-                showMessage("呼叫失败,可能对方不在线")
+                showMessage(R.string.call_failed)
             } else if (resTcpModel.action == TcpAction.VoiceAction.CALLING){
-                showMessage("对方通话中")
+                showMessage(R.string.call_busy)
             }
         } else if (messageEvent.tag == 4) {
             presenter.loadList(partId)

+ 15 - 8
home/src/main/code/com/wdkl/ncs/android/component/home/activity/VoiceMsgActivity.kt

@@ -30,6 +30,7 @@ import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
 import java.io.File
+import java.util.*
 
 class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>(), VoiceMsgContract.View {
     var TAG = VoiceMsgActivity::class.java.simpleName
@@ -45,6 +46,8 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
     var voiceFile : String? = null
     lateinit var wakeLock : PowerManager.WakeLock
 
+    private var language = "zh"
+
     @Autowired(name = TO_DEVICE_ID, required = true)
     @JvmField
     var toDeviceId = 0
@@ -68,6 +71,8 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
         // 获取WakeLock对象
         val powerManager= getSystemService(Context.POWER_SERVICE) as PowerManager
         wakeLock = powerManager.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP or PowerManager.SCREEN_DIM_WAKE_LOCK, "voice_msg_on")
+
+        language = LocaleMangerUtils.getApplicationLocale().language
     }
 
     override fun enableHeadsetVoiceMsg(): Boolean {
@@ -88,7 +93,7 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
                     MediaPlayHelper.getInstance().stopMusic(true)
                     //EventBus.getDefault().post(MessageEvent(false, Constants.EVENT_CLEAR_IM))
                     RecordHelper.getInstance().startRecord()
-                    tv_voice_text.text = "松开留言,上滑取消"
+                    tv_voice_text.setText(R.string.str_voice_msg_btn_title)
                     voice_call_timer.base = SystemClock.elapsedRealtime()
                     voice_call_timer.start()
                     voiceFile = RecordHelper.getInstance().audiofilePath
@@ -107,16 +112,16 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
                 MotionEvent.ACTION_UP -> {
                     upTime = System.currentTimeMillis()
                     RecordHelper.getInstance().stopRecord()
-                    tv_voice_text.text = "按住说话"
+                    tv_voice_text.setText(R.string.str_voice_msg_btn_text)
                     voice_call_timer.base = SystemClock.elapsedRealtime()
                     voice_call_timer.stop()
 
                     if (Math.abs(upTime - downTime) <= 1000) {
                         RecordHelper.getInstance().deleteAudioFile(voiceFile)
-                        showMessage("说话时间太短")
+                        showMessage(R.string.str_voice_msg_record_loss)
                     } else if(cancel) {
                         RecordHelper.getInstance().deleteAudioFile(voiceFile)
-                        showMessage("语音留言已取消")
+                        showMessage(R.string.str_voice_msg_record_cancel)
                     } else {
                         //上传语音留言
                         if (voiceFile != null) {
@@ -146,10 +151,12 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
         val tcpModel = ImUtil.imMsg(Constants.deviceId, toDeviceId, result)
         NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe{
             if (it){
-                SoundPoolManager.getInstance().playSound(3)
-                showMessage("留言发送成功!")
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SoundPoolManager.getInstance().playSound(3)
+                }
+                showMessage(R.string.str_voice_msg_send_success)
             } else {
-                showMessage("留言发送失败!")
+                showMessage(R.string.str_voice_msg_send_fail)
             }
             finish()
         }
@@ -181,7 +188,7 @@ class VoiceMsgActivity:BaseActivity<VoiceMsgPresenter,ActivityVoiceMsgBinding>()
         }
         RecordHelper.getInstance().stopRecord()
         RecordHelper.getInstance().deleteAudioFile(voiceFile)
-        showMessage("语音留言已取消")
+        showMessage(R.string.str_voice_msg_record_cancel)
         finish()
     }
 

+ 4 - 4
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchCallRecordsActivity.kt

@@ -157,10 +157,10 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
                                         }
                                     }*/
                             } else {
-                                showMessage("呼叫失败,可能手机号异常")
+                                showMessage(R.string.call_phone_failed)
                             }
                         } catch (e: Exception) {
-                            showMessage("呼叫失败,请检查手机号")
+                            showMessage(R.string.call_phone_failed)
                         }
                     } else {
                         DeviceChannel.calling = true
@@ -299,9 +299,9 @@ class WatchCallRecordsActivity : BaseActivity<WatchCallRecordsFragmentPresenter,
                     call_relyout.isEnabled = true
                     DeviceChannel.calling = false
                     DeviceChannel.callId = 0
-                    showMessage("呼叫失败,可能对方不在线")
+                    showMessage(R.string.call_failed)
                 }else if (tcpModel.action == TcpAction.VoiceAction.CALLING){
-                    showMessage("对方通话中")
+                    showMessage(R.string.call_busy)
                     DeviceChannel.calling = false
                 }
             }

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchContactsActivity.kt

@@ -146,9 +146,9 @@ class WatchContactsActivity : BaseActivity<WatchActivityPresenter, WatchContacts
         if (messageEvent.tag == 2) {
             val resTcpModel = messageEvent.getMessage() as TcpModel
             if (resTcpModel.action  == TcpAction.VoiceAction.FAILED){
-                showMessage("呼叫失败,可能对方不在线")
+                showMessage(R.string.call_failed)
             } else if (resTcpModel.action == TcpAction.VoiceAction.CALLING){
-                showMessage("对方通话中")
+                showMessage(R.string.call_busy)
             }
         } else if (messageEvent.tag == 4) {
             presenter.loadData(page, Constants.deviceId)

+ 0 - 339
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchEventDetailActivity.kt

@@ -1,339 +0,0 @@
-package com.wdkl.ncs.android.component.home.activity
-
-import android.content.Context
-import android.content.Intent
-import android.os.CountDownTimer
-import android.os.VibrationEffect
-import android.os.Vibrator
-import android.util.Log
-import android.view.View
-import com.enation.javashop.android.jrouter.external.annotation.Autowired
-import com.enation.javashop.android.jrouter.external.annotation.Router
-import com.enation.javashop.net.engine.model.NetState
-import com.enation.javashop.utils.base.tool.CommonTool
-import com.enation.javashop.utils.base.widget.LoadingDialog
-import com.google.gson.Gson
-import com.wdkl.ncs.android.component.home.R
-import com.wdkl.ncs.android.component.home.databinding.WatchActivityEventDetailBinding
-import com.wdkl.ncs.android.component.home.launch.HomeLaunch
-import com.wdkl.ncs.android.component.home.ui.CallSingleActivity
-import com.wdkl.ncs.android.component.home.util.HandleTcpConnect
-import com.wdkl.ncs.android.component.home.util.MediaPlayHelper
-import com.wdkl.ncs.android.component.home.util.RingPlayHelper
-import com.wdkl.ncs.android.component.home.util.SpeechUtil
-import com.wdkl.ncs.android.middleware.common.Constants
-import com.wdkl.ncs.android.component.home.util.TimeTransition
-import com.wdkl.ncs.android.lib.utils.AppTool
-import com.wdkl.ncs.android.lib.utils.showMessage
-import com.wdkl.ncs.android.lib.vo.MessageEvent
-import com.wdkl.ncs.android.middleware.api.ApiManager
-import com.wdkl.ncs.android.middleware.logic.contract.home.WatchHomeActivityContract
-import com.wdkl.ncs.android.middleware.logic.presenter.home.WatchHomeActivityPresenter
-import com.wdkl.ncs.android.middleware.model.ServerIpInfo
-import com.wdkl.ncs.android.middleware.model.dos.AppVersionDO
-import com.wdkl.ncs.android.middleware.model.dos.ChannelDO
-import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
-import com.wdkl.ncs.android.middleware.model.dto.TcpSeverDTO
-import com.wdkl.ncs.android.middleware.model.vo.DeviceVO
-import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
-import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO
-import com.wdkl.ncs.android.middleware.tcp.NettyClient
-import com.wdkl.ncs.android.middleware.tcp.channel.DeviceChannel
-import com.wdkl.ncs.android.middleware.tcp.channel.EventUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.ImUtil
-import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
-import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel
-import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
-import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
-import kotlinx.android.synthetic.main.watch_activity_event_detail.*
-import org.greenrobot.eventbus.Subscribe
-import org.greenrobot.eventbus.ThreadMode
-
-@Router(path = "/event/detail")
-class WatchEventDetailActivity : BaseActivity<WatchHomeActivityPresenter, WatchActivityEventDetailBinding>(), WatchHomeActivityContract.View {
-
-    var TAG = WatchEventDetailActivity::class.java.getSimpleName()
-    //参数自动注入
-    @Autowired(name = "tcpModelStr", required = true)
-    @JvmField
-    var tcpModelStr: String = ""
-    @Autowired(name = "boolVibrator", required = false)
-    @JvmField
-    var boolVibrator = false
-
-    var interactionVO: InteractionVO? = null
-    var tcpModel: TcpModel? = null
-    private var CALL_TIMEOUT = 2 //多久可以再次点击
-
-
-    lateinit var countDownTimer: CountDownTimer
-    private lateinit var loadingDialog: LoadingDialog
-    lateinit var mVibrator: Vibrator
-
-    override fun getLayId(): Int {
-        return R.layout.watch_activity_event_detail
-    }
-
-    override fun enableHeadsetVoiceMsg(): Boolean {
-        return false
-    }
-
-    override fun setDeviceSettingData(partSettingDO: PartSettingDO) {
-    }
-
-    override fun onError(message: String, type: Int) {
-    }
-
-    override fun complete(message: String, type: Int) {
-    }
-
-    override fun start() {
-    }
-
-    override fun networkMonitor(state: NetState) {
-    }
-
-    override fun bindDagger() {
-        HomeLaunch.component.inject(this)
-    }
-
-    override fun bindEvent() {
-        back.setOnClickListener {
-            //            push("/watch/callrecords", { postcard ->
-//                postcard.withString("action","UNREAD")
-//                postcard.withString("customer_id","")
-            finish()
-//            })
-        }
-
-        call_relyout.setOnClickListener {
-
-            call_relyout.isEnabled = false
-            Log.i(TAG, "当前界面 tcpModel " + this.tcpModel?.toJson())
-            var tcpModel: TcpModel? = null
-            if (interactionVO?.fromDeviceMemberId==null){
-                tcpModel = VoiceUtil.voiceCall(Constants.deviceId, interactionVO?.fromDeviceId)
-            } else if (interactionVO?.fromDeviceMemberId != Constants.memberId) {
-                tcpModel = VoiceUtil.voiceCall(Constants.deviceId, interactionVO?.fromDeviceId)
-            } else {
-                tcpModel = VoiceUtil.voiceCall(Constants.deviceId, interactionVO?.toDeviceId)
-            }
-
-
-            DeviceChannel.calling = true
-
-            val intent = Intent(this@WatchEventDetailActivity, CallSingleActivity::class.java)
-            intent.putExtra(CallSingleActivity.EXTRA_ROOM_ID, Constants.sipId)
-            intent.putExtra(CallSingleActivity.EXTRA_MO, true)
-            intent.putExtra(CallSingleActivity.EXTRA_AUDIO_ONLY, true)
-            intent.putExtra(CallSingleActivity.EXTRA_TCPMODEL, tcpModel);
-            //intent.putExtra(CallSingleActivity.EXTRA_SHOWNAME, receivedData!!.frameFullName + " "+receivedData!!.customerNamed)
-            //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            startActivity(intent)
-
-            countDownTimer.start()
-            SpeechUtil.getInstance().stopSpeak()
-        }
-
-        event_status_img.setOnClickListener {
-            event_status_img.isEnabled = false
-            countDownTimer.start()
-            if (tcpModel?.type == TcpType.EVENT) {
-                loadingDialog.show()
-                val tcpModel = EventUtil.eventResponse(Constants.deviceId, interactionVO!!.fromDeviceId, interactionVO!!.id)
-                NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                    if (it) {
-                        Log.d(TAG, "TCP.发送消息完成")
-                    } else {
-                        Log.e(TAG, "TCP.发送消息失败")
-                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                    }
-                    loadingDialog.dismiss()
-                }
-            } else if (tcpModel?.type == TcpType.IM) {
-                if (!Constants.deviceId.equals("")) {
-                    if (interactionVO!!.actionEnd == null) {
-                        var imUtilTcpModel = ImUtil.imRead(Constants.deviceId, interactionVO!!.fromDeviceId, interactionVO!!.id)
-                        NettyClient.instance.sendMsg(imUtilTcpModel.toJson()).subscribe {
-                            if (it) {
-                                Log.d(TAG, "TCP.发送消息完成")
-                            } else {
-                                Log.e(TAG, "TCP.发送消息失败")
-                                HandleTcpConnect.instance.tcpReConnectWithMsgShow()
-                            }
-                        }
-                        MediaPlayHelper.getInstance().stopMusic(false)
-                        MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + interactionVO!!.data, 1f, false)
-                    } else {
-                        MediaPlayHelper.getInstance().stopMusic(false)
-                        MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + interactionVO!!.data, 1f, false)
-                    }
-                } else {
-                    showMessage("获取不到当给前设备id")
-                }
-            }
-        }
-    }
-
-    override fun destory() {
-        if(countDownTimer != null){
-            countDownTimer.cancel()
-        }
-        MediaPlayHelper.getInstance().stopMusic(true)
-        RingPlayHelper.stopRingTone()
-    }
-
-    override fun init() {
-        loadingDialog = CommonTool.createLoadingDialog(this, R.layout.custom_loading,R.id.loadding_image)
-        initCountDownTimer()
-        //震动
-        mVibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
-        if (boolVibrator){
-            mVibrator.cancel()
-            //开启振动后 等待0.1s振动 振动2s 等待1s 振动2s 等待1s
-            val pattern = longArrayOf(100, 2000, 1000, 2000)
-            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
-                mVibrator.vibrate(VibrationEffect.createWaveform(pattern, -1))
-            } else {
-                mVibrator.vibrate(pattern, -1)
-            }
-        }
-
-        Log.i(TAG, "参数 tcpModelStr : " + tcpModelStr)
-        tcpModel = TcpModel.getModelByJson(tcpModelStr)
-        //var gson = GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create()
-        interactionVO = Gson().fromJson(tcpModel?.data.toString(), InteractionVO::class.java)
-
-        if (interactionVO != null) {
-            tv_frame_name.setText(interactionVO?.fromFrameFullName)
-            if (interactionVO?.fromDeviceMemberId == Constants.memberId){
-                baby_mother_name.setText(interactionVO?.toMemberName)
-            } else {
-                baby_mother_name.setText(interactionVO?.fromMemberName)
-            }
-
-            if (tcpModel?.type == TcpType.IM) {
-                event_text.setText("语音留言")
-                event_status_img.setImageResource(R.drawable.icon_hd_live)
-                if (interactionVO?.actionEnd != null) {
-                    event_end_text.setText("响应时间:" + TimeTransition().stampToDate(interactionVO!!.actionEnd * 1000))
-                    //event_status_img.isEnabled = false
-                    //event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live_item)
-                } /*else {
-                    event_status_img.setImageResource(com.starrtc.demo.R.drawable.icon_hd_live)
-                }*/
-            } else if (tcpModel?.type == TcpType.EVENT) {
-                event_text.setText(interactionVO?.data)
-
-                if (interactionVO?.actionEnd != null) {
-                    event_end_text.setText("响应时间:" + TimeTransition().stampToDate(interactionVO!!.actionEnd * 1000))
-                    event_status_img.isEnabled = false
-                    event_status_img.setImageResource(R.drawable.icon_switch_on)
-                }
-            } else {
-                event_status_img.visibility = View.GONE
-//                call_relyout.visibility = View.VISIBLE
-                if (tcpModel?.type == TcpType.VOICE) {
-                    //todo 腕表没有按主机这边设计 没数据
-                    if (interactionVO?.actionEnd != null) {
-                        //判断是呼入还是呼出 1 分机到主机 2主机到分机
-                        if (interactionVO?.actionDirectionType == 1) {
-                            event_text.setText("语音呼入已接")
-                        } else if (interactionVO?.actionDirectionType == 2 || interactionVO?.actionDirectionType == 3) {
-                            event_text.setText("语音呼出已接")
-                        }
-                    } else {
-                        //判断是呼入还是呼出 1 分机到主机 2主机到分机
-                        if (interactionVO?.actionDirectionType == 1) {
-                            event_text.setText("语音呼入未接")
-                        } else if (interactionVO?.actionDirectionType == 2 || interactionVO?.actionDirectionType == 3) {
-                            event_text.setText("语音呼出未接")
-                        }
-                    }
-//                    event_text.setText("语音呼叫")
-
-                } else if (tcpModel?.type == TcpType.VIDEO) {
-
-                    event_text.setText("视频呼叫")
-                } else if (tcpModel?.type == TcpType.SOS) {
-                    event_text.setText("SOS紧急呼叫")
-                }
-            }
-        }
-    }
-
-
-    fun initCountDownTimer() {
-        countDownTimer = object : CountDownTimer(CALL_TIMEOUT * 1000L, 1000) {
-            override fun onTick(millisUntilFinished: Long) {
-            }
-
-            override fun onFinish() {
-                loadingDialog.dismiss()
-                call_relyout.isEnabled = true
-                event_status_img.isEnabled = true
-
-            }
-        }
-    }
-
-    override fun handleAppVersion(appInfo: AppVersionDO) {
-    }
-
-    override fun setDeviceDo(data: DeviceVO) {
-    }
-
-    override fun setTcpServerHost(tcpSeverDTO: TcpSeverDTO) {
-    }
-
-    override fun setServerInfo(serverIpInfo: ServerIpInfo) {
-    }
-
-    override fun setDeviceVoiceChannel(channelList: ArrayList<ChannelDO>) {
-    }
-
-    override fun setPhoneNumberWhiteList(phoneList: ArrayList<String>) {
-    }
-
-    override fun setContact(contactsVOs: List<WatchContactVO>) {
-
-    }
-
-    @Subscribe(threadMode = ThreadMode.MAIN)
-    fun onMoonEvent(messageEvent: MessageEvent) {
-        if (messageEvent.tag == 4) {
-            val resTcpModel = messageEvent.getMessage() as TcpModel
-            if (resTcpModel.type == TcpType.DATA && resTcpModel.action == TcpAction.DataAction.INTERACTION) {
-                if (resTcpModel.data != null) {
-                    loadingDialog.dismiss()
-                    val responseInteractionVO = Gson().fromJson<InteractionVO>(resTcpModel.getData().toString(), InteractionVO::class.java)
-
-                    if (tcpModel?.type == TcpType.IM) {
-                        event_status_img.setImageResource(R.drawable.icon_hd_live_item)
-                        showMessage("已播放")
-                    } else if (tcpModel?.type == TcpType.EVENT) {
-                        event_status_img.setImageResource(R.drawable.icon_switch_on)
-                        showMessage("已响应")
-                        AppTool.Time.delay(1500){
-                            finish()
-                        }
-                    }
-
-                    mVibrator.cancel()
-                    event_end_text.setText("响应时间:" + TimeTransition().stampToDate(responseInteractionVO.actionEnd * 1000))
-                }
-            }
-        } else if (messageEvent.tag == 1) {
-            loadingDialog.dismiss()
-            mVibrator.cancel()
-            //具体逻辑在TcpHandleService中处理
-        } else if (messageEvent.tag == 2) {
-            val resTcpModel = messageEvent.getMessage() as TcpModel
-            if (resTcpModel.action  == TcpAction.VoiceAction.FAILED){
-                showMessage("呼叫失败,可能对方不在线")
-            } else if (resTcpModel.action == TcpAction.VoiceAction.CALLING){
-                showMessage("对方通话中")
-            }
-        }
-    }
-}

+ 70 - 42
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt

@@ -29,10 +29,8 @@ import com.wdkl.ncs.android.component.home.service.WdKeepAliveService
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
 import com.wdkl.ncs.android.component.home.util.*
 import com.wdkl.ncs.android.lib.base.BaseApplication
+import com.wdkl.ncs.android.lib.utils.*
 import com.wdkl.ncs.android.lib.utils.Util
-import com.wdkl.ncs.android.lib.utils.joinManager
-import com.wdkl.ncs.android.lib.utils.push
-import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.lib.vo.MessageEvent
 import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.middleware.logic.contract.home.WatchHomeActivityContract
@@ -60,6 +58,8 @@ import kotlinx.android.synthetic.main.watch_activity_register.*
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
+import java.util.*
+import kotlin.collections.ArrayList
 
 
 //@Router(path = "/watch/home")
@@ -81,6 +81,8 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
     private var clickTime: Long = 0
     private var contactUpdating = false
 
+    private var language = "zh"
+
     private lateinit var netWorkChangeReceiver: NetWorkChangeReceiver
 
     private val REQUEST_MANAGER_PERMISSION = 11
@@ -132,7 +134,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
 -100 to -109 dBm, then it's generally considered poor signal (1 to 2 bars).
 -110 to -120 dBm, then it's generally considered very poor signal (0 to 1 bar)
          */
-        if (netType == NetHelper.NETWORK_4G) {
+        /*if (netType == NetHelper.NETWORK_4G) {
             if (teleManager != null) {
                 teleManager.listen(object : PhoneStateListener() {
                     override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {
@@ -162,10 +164,11 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                     }
                 }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
             }
-        }
+        }*/
 
         requestPermissions()
 
+        language = LocaleMangerUtils.getApplicationLocale().language
     }
 
     private fun permissionGranted() {
@@ -223,7 +226,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
             //用户拒绝权限,重新申请
             if (!Environment.isExternalStorageManager()) {
                 //requestManagerPermission()
-                showMessage("请授予外部存储访问权限")
+                showMessage(R.string.grant_write_permission)
             } else {
                 initTcp()
             }
@@ -312,6 +315,37 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
 
             presenter.getDeviceVO(Constants.imei)
         }
+
+
+        //通过服务端设置语言
+        if (SettingConfig.getLanguageMode(activity) == 0) {
+            var needReboot = false
+            if ("cn".equals(serverIpInfo.lang)) {
+                //中文
+                if (SettingConfig.getLanguageId(activity) != 2) {
+                    needReboot = true
+                }
+                SettingConfig.setLanguageId(activity, 2)
+            } else if ("en".equals(serverIpInfo.lang)) {
+                //英文
+                if (SettingConfig.getLanguageId(activity) != 1) {
+                    needReboot = true
+                }
+                SettingConfig.setLanguageId(activity, 1)
+            } else if ("es".equals(serverIpInfo.lang)) {
+                //西班牙语
+                if (SettingConfig.getLanguageId(activity) != 3) {
+                    needReboot = true
+                }
+                SettingConfig.setLanguageId(activity, 3)
+            }
+
+            if (needReboot) {
+                AppTool.Time.delay(5000) {
+                    AppUtils.restartApp()
+                }
+            }
+        }
     }
 
     private fun requestPermissions() {
@@ -340,7 +374,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 )
                 .subscribe {
                     if (!it) {
-                        showMessage("请重新授权,进入App")
+                        showMessage(R.string.permission_tips)
                         requestPermissions()
                     } else {
                         permissionGranted()
@@ -370,7 +404,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 )
                 .subscribe {
                     if (!it) {
-                        showMessage("请重新授权,进入App")
+                        showMessage(R.string.permission_tips)
                         requestPermissions()
                     } else {
                         permissionGranted()
@@ -382,7 +416,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
     override fun handleAppVersion(appInfo: AppVersionDO) {
         val versionCode = CommonUtils.getAppVersionCode(activity)
         if (versionCode > 0 && versionCode < appInfo.versionNo && !AppUpdateActivity.opened) {
-            showMessage("有新版本")
+            showMessage(R.string.new_version_tips)
             val intent = Intent()
             intent.setClass(this, AppUpdateActivity::class.java)
             startActivity(intent)
@@ -395,8 +429,8 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
     override fun setDeviceDo(data: DeviceVO) {
         if (data.id == null || data.id <= 0) {
             loadingDialog.dismiss()
-            showMessage("本机未注册,请将识别码发给管理员")
-            tv_register_status.text = "本机未注册,请将识别码发给管理员。管理员注册本机后请点击注册完成进入"
+            showMessage(R.string.device_not_register)
+            tv_register_status.setText(R.string.device_not_register_tips)
             if (DaemonEnv.app != null) {
                 SpManager.getInstance().putBoolean(Constants.SYSTEM_REGISTERED, false)
             }
@@ -415,7 +449,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         watch_activity_home_linyout.visibility = View.VISIBLE
         tv_register_ok.visibility = View.GONE
 
-        tv_register_status.text = "本机已注册,进入系统中"
+        tv_register_status.text = "Loading..."
         tv_register_status.setTextColor(Color.GREEN)
 
         isUnRegister = false
@@ -431,12 +465,12 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         presenter.getWatchContacts(Constants.deviceId)
 
         if (Constants.deviceId <= 0 || TextUtils.isEmpty(Constants.sipId)) {
-            showMessage("初始化数据时服务器返回数据不全,请联系管理员")
-            tv_feedback_device_info.text = "初始化数据时服务器返回数据不全,请联系管理员"
+            showMessage(R.string.init_data_error)
+            tv_feedback_device_info.setText(R.string.init_data_error)
             return
         } else if (TextUtils.isEmpty(Constants.tcpServer)) {
-            showMessage("初始化tcp连接数据为null")
-            tv_feedback_device_info.text = "初始化tcp连接数据为null"
+            showMessage(R.string.init_server_data_error)
+            tv_feedback_device_info.setText(R.string.init_server_data_error)
             return
         }
 
@@ -449,7 +483,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         //onTcpConnectSuccess()
 
         if (Strings.isNullOrEmpty(Constants.userName)) {
-            watch_name_tv.text = "重载"
+            watch_name_tv.setText(R.string.str_reload)
             watch_name_tv.setTextColor(Color.BLACK)
             watch_name_tv.textSize = 13f
             watch_name_tv.setBackgroundResource(R.drawable.javashop_btn_balck_line_bg)
@@ -459,7 +493,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 return@setOnClickListener
             }
 
-            watch_role_name_tv.text = "请使用PC设置使用人"
+            watch_role_name_tv.setText(R.string.device_user_empty)
             watch_role_name_tv.textSize = 12f
         } else {
             watch_name_tv.text = Constants.userName
@@ -471,6 +505,10 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 }
                 watch_user_phone_tv.text = data.phoneNumber
             }
+
+            if (Locale.CHINESE.getLanguage().equals(language)) {
+                watch_role_name_tv.visibility = View.VISIBLE
+            }
         }
         Constants.phoneNumber = data.phoneNumber
 
@@ -490,7 +528,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         //加载电话号码白名单
         presenter.getPhoneNumberWhiteList(Constants.deviceId)
 
-        showMessage("载入完成")
+        showMessage("Load complete")
     }
 
     override fun setDeviceVoiceChannel(channelList: ArrayList<ChannelDO>) {
@@ -529,7 +567,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
                 }.start()
 
             } else {
-                showMessage("通讯录正在更新...")
+                showMessage(R.string.contact_update_porgress)
             }
         }
     }
@@ -573,7 +611,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         runOnUiThread(Runnable {
             Log.i(TAG, "连接成功设置UI")
             tv_net_reconnect_text.visibility = View.GONE
-            tv_signal_strength.text = "网络正常"
+            tv_signal_strength.setText(R.string.tcp_connect_success)
             netOffLoadingDialog.dismiss()
             sip_state_tv.setBackgroundColor(Color.parseColor("#00FFFF"))
         })
@@ -583,7 +621,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Log.w(TAG, "网络断开")
 
         runOnUiThread(Runnable {
-            tv_signal_strength.text = "网络断开"
+            tv_signal_strength.setText(R.string.tcp_connect_failed)
             tv_net_reconnect_text.visibility = View.VISIBLE
             netOffLoadingDialog.show()
             sip_state_tv.setBackgroundColor(Color.parseColor("#FF0000"))
@@ -629,6 +667,10 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         tv_config_server.setOnClickListener {
             ServerConfigDialogHelper.showPasswordDialog(activity)
         }
+
+        tv_language_settings.setOnClickListener {
+            LanguageSetDialogHelper.showDialog(activity)
+        }
     }
 
     override fun enableHeadsetVoiceMsg(): Boolean {
@@ -659,7 +701,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
 
             if (NetHelper.getInstance().getNetworkState(this) == NetHelper.NETWORK_NONE) {
                 runOnUiThread(Runnable {
-                    showMessage("未能正确连接,请重试")
+                    showMessage(R.string.net_disconnect)
                 })
             }
         }).start()
@@ -752,9 +794,9 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
             R.id.channel_im_layout -> {
                 //群留言
                 if (Constants.channelId == -1) {
-                    showMessage("请先建立频道")
+                    showMessage(R.string.str_im_no_channel)
                 } else if (TextUtils.isEmpty(Constants.userName)) {
-                    showMessage("设备未绑定")
+                    showMessage(R.string.device_user_not_register)
                 } else {
                     var intent = Intent(this, ChannelImActivity::class.java)
                     startActivity(intent)
@@ -768,7 +810,7 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
             }
             R.id.other_linyout -> {
                 if (System.currentTimeMillis() - clickTime > 2000) {
-                    showMessage("再点一次进入设置")
+                    showMessage(R.string.click_twice_start_settings)
                 } else {
                     val intent = Intent(this, WatchUserSettingActivity::class.java)
                     startActivity(intent)
@@ -778,20 +820,6 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         }
     }
 
-    /*override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean {
-        Log.i(TAG, "keyup keyCode " + keyCode)
-        return if (keyCode == KeyEvent.KEYCODE_BACK && event.action == KeyEvent.ACTION_UP) {
-            //不执行父类点击事件
-            true
-        } else super.onKeyUp(keyCode, event)
-        //继续执行父类其他点击事件
-    }
-
-    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
-        Log.i(TAG, "keydown keyCode " + keyCode)
-        return super.onKeyDown(keyCode, event)
-    }*/
-
 
     override fun onBackPressed() {
         //禁用返回
@@ -812,12 +840,12 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
             electric_quantity_tv.text = "" + power
             battery_warning_tv.setTextColor(Color.parseColor("#FF3030"))
             battery_warning_tv.visibility = View.VISIBLE
-            battery_warning_tv.text = "低电量,请注意充电"
+            battery_warning_tv.setText(R.string.low_power)
         } else if (10 > power) {
             electric_quantity_tv.text = "" + power
             battery_warning_tv.setTextColor(Color.parseColor("#8B2323"))
             battery_warning_tv.visibility = View.VISIBLE
-            battery_warning_tv.text = "电量过低,请充电"
+            battery_warning_tv.setText(R.string.low_power)
         } else {
             battery_warning_tv.visibility = View.GONE
             electric_quantity_tv.text = "" + power

+ 56 - 7
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchUserSettingActivity.java

@@ -6,9 +6,12 @@ import android.os.Bundle;
 import android.provider.Settings;
 import android.util.Log;
 import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.Button;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
+import android.widget.Spinner;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -20,6 +23,7 @@ import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.service.WdKeepAliveService;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.AppUtils;
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
 import com.wdkl.ncs.android.component.home.util.NetHelper;
 import com.wdkl.ncs.android.component.home.util.PasswordDialogHelper;
 import com.wdkl.ncs.android.component.home.util.PhoneNumberDialogHelper;
@@ -43,6 +47,10 @@ public class WatchUserSettingActivity extends Activity {
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
+        //切换语言
+        int languageId = SettingConfig.getLanguageId(this);
+        LocaleMangerUtils.setApplicationLanguageByIndex(this, languageId);
+
         super.onCreate(savedInstanceState);
         setContentView(R.layout.user_setting_layout);
 
@@ -68,7 +76,8 @@ public class WatchUserSettingActivity extends Activity {
         tvDeviceImei.setText(Constants.Companion.getImei());
         tvDeviceIp.setText(NetHelper.getInstance().getLocalIP());
         tvServerIp.setText(Constants.Companion.getTcpServer());
-        tvPhoneType.setText("手机-" + Constants.Companion.getPhoneType() + ", 分机-" + Constants.Companion.getBedPhoneType() + ", 主机-" + Constants.Companion.getNursePhoneType());
+        String type = getString(R.string.phone_type, Constants.Companion.getPhoneType(), Constants.Companion.getBedPhoneType(), Constants.Companion.getNursePhoneType());
+        tvPhoneType.setText(type);
 
         if (SettingConfig.getVoiceCallType(BaseApplication.appContext) == SettingConfig.PHONE_CALL) {
             callYes.setChecked(true);
@@ -76,6 +85,46 @@ public class WatchUserSettingActivity extends Activity {
             callNo.setChecked(true);
         }
 
+        int mode = SettingConfig.getLanguageMode(BaseApplication.appContext);
+        RadioGroup languageMode = findViewById(R.id.group_language_mode);
+        RadioButton languageYes = findViewById(R.id.rb_language_yes);
+        RadioButton languageNo = findViewById(R.id.rb_language_no);
+        if (mode == 0) {
+            languageYes.setChecked(true);
+        } else {
+            languageNo.setChecked(true);
+        }
+        languageMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup group, int checkedId) {
+                if (checkedId == R.id.rb_language_yes) {
+                    SettingConfig.setLanguageMode(BaseApplication.appContext, 0);
+                } else {
+                    SettingConfig.setLanguageMode(BaseApplication.appContext, 1);
+                }
+            }
+        });
+
+        int originIndex = LocaleMangerUtils.getCurrentLocaleIndex();
+        Spinner spinner = findViewById(R.id.spinner_language_select);
+        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
+                R.array.language_list, R.layout.spinner_item);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        spinner.setAdapter(adapter);
+        spinner.setSelection(originIndex);
+        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                Log.d("languageId", "pos: " + position + ", originIndex: " + originIndex);
+                SettingConfig.setLanguageId(BaseApplication.appContext, position);
+            }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> parent) {
+
+            }
+        });
+
 
         btnChange.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -84,11 +133,11 @@ public class WatchUserSettingActivity extends Activity {
                 NettyClient.Companion.getInstance().sendMsg(userChangeModel.toJson()).subscribe(it->{
                     if (it) {
                         Log.d(TAG, "TCP.发送消息完成");
-                        ExtendMethodsKt.showMessage("换班通知发送成功,请等待处理...");
+                        ExtendMethodsKt.showMessage(R.string.user_change_success);
                         WatchUserSettingActivity.this.finish();
                     } else {
                         Log.e(TAG, "TCP.发送消息失败");
-                        ExtendMethodsKt.showMessage("换班通知发送失败,请重试");
+                        ExtendMethodsKt.showMessage(R.string.user_change_failed);
                     }
                 });
             }
@@ -110,7 +159,7 @@ public class WatchUserSettingActivity extends Activity {
                     intent.setClass(_this, AppUpdateActivity.class);
                     startActivity(intent);
                 } else {
-                    Toast.makeText(_this, "请10秒后再尝试", Toast.LENGTH_SHORT).show();
+                    ExtendMethodsKt.showMessage(R.string.retry_tips);
                 }
             }
         });
@@ -141,7 +190,7 @@ public class WatchUserSettingActivity extends Activity {
             @Override
             public void onClick(View v) {
                 if (Strings.isNullOrEmpty(Constants.Companion.getUserName())) {
-                    Toast.makeText(_this, "设备未绑定", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(_this, R.string.device_user_not_register, Toast.LENGTH_SHORT).show();
                 } else {
                     Intent intent = new Intent(getApplicationContext(), ContactUpdateActivity.class);
                     startActivity(intent);
@@ -178,9 +227,9 @@ public class WatchUserSettingActivity extends Activity {
 
         Log.d(TAG, "tts state: " + Constants.Companion.getTtsState());
         if (Constants.Companion.getTtsState() == 2) {
-            tvTtsStatus.setText("正常");
+            tvTtsStatus.setText(R.string.tts_init_success);
         } else {
-            tvTtsStatus.setText("异常");
+            tvTtsStatus.setText(R.string.tts_init_failed);
         }
     }
 }

+ 1 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/ChannelImItemAdapter.kt

@@ -90,7 +90,7 @@ class ChannelImItemAdapter(val data: ArrayList<ChannelIMVO>, val imActivity: Act
 
 
             binding.imPlayTv.setOnClickListener {
-                showMessage("播放:" + itemData.audioPath)
+                showMessage("play:" + itemData.audioPath)
                 EventBus.getDefault().post(MessageEvent(false, Constants.EVENT_CLEAR_IM))
                 MediaPlayHelper.getInstance().stopMusic(false)
                 MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + itemData.audioPath, 1f, false)

+ 6 - 6
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/NewEventItemAdapter.kt

@@ -78,7 +78,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
             }
 
             if (TextUtils.isEmpty(showName)) {
-                binding.eliMemberName.text = "未知"
+                binding.eliMemberName.setText(R.string.str_null)
             } else {
                 binding.eliMemberName.text = showName
             }
@@ -120,7 +120,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                     }
                 }
                 TcpType.IM.name->{
-                    binding.eliEventName.text = "语音留言"
+                    binding.eliEventName.setText(R.string.event_voice_msg)
                     binding.eliEventResponse.visibility = View.GONE
                     if (itemData.actionEnd!=null){
                         binding.eliEventResponse.visibility = View.GONE
@@ -128,7 +128,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                         binding.eliEventName.setTextColor(Color.GREEN)
 
                         binding.eliImRead.setOnClickListener {
-                            showMessage("播放:" + itemData.data)
+                            showMessage("play:" + itemData.data)
                             MediaPlayHelper.getInstance().stopMusic(false)
                             MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + itemData.data, 1f, false)
                             ImPlayDialogHelper.showImPlayDialog(activity, itemData.fromFrameFullName, TimeTransition().stampToTime(itemData.createDate*1000))
@@ -138,7 +138,7 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                         binding.eliImRead.visibility = View.VISIBLE
 
                         binding.eliImRead.setOnClickListener {
-                            showMessage("播放:" + itemData.data)
+                            showMessage("play:" + itemData.data)
                             MediaPlayHelper.getInstance().stopMusic(false)
                             MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + itemData.data, 1f, false)
                             ImPlayDialogHelper.showImPlayDialog(activity, itemData.fromFrameFullName, TimeTransition().stampToTime(itemData.createDate*1000))
@@ -186,11 +186,11 @@ class NewEventItemAdapter(var data:ArrayList<InteractionVO>, val activity: Activ
                     }
                 }
                 TcpType.VOICE.name->{
-                    binding.eliEventName.text = "通话"
+                    binding.eliEventName.setText(R.string.event_voice_call)
                     binding.eliEventResponse.visibility = View.GONE
                 }
                 TcpType.PHONE.name->{
-                    binding.eliEventName.text = "通话"
+                    binding.eliEventName.setText(R.string.event_voice_call)
                     binding.eliEventResponse.visibility = View.GONE
                 }
             }

+ 22 - 19
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemAdapter.kt

@@ -29,6 +29,7 @@ import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 
 class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context) : BaseDelegateAdapter<BaseRecyclerViewHolder<TakeoverItemBinding>, JsonObject>(){
     val TAG = "TakeoverItemAdapter"
@@ -61,8 +62,8 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
         holder.bind {
             binding ->
             val itemData = getItem(position)
-            binding.clerkName.text = "未知"
-            binding.tvPhoneNumber.text = "暂无"
+            binding.clerkName.setText(R.string.str_null)
+            binding.tvPhoneNumber.setText(R.string.str_empty)
             try {
                 binding.clerkName.text = itemData.get("clerk_name").asString
                 binding.tvPhoneNumber.text = itemData.get("phone_number").asString
@@ -73,24 +74,26 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
             if (Strings.isNullOrEmpty(Constants.userName)){
                 binding.btnCallOut.visibility = View.GONE
                 binding.btnUserChange.setOnClickListener {
-                    CommonTool.createVerifyDialog("确认切换吗","取消","确定",context,object : CommonTool.DialogInterface{
-                        override fun yes() {
-                            loadingDialog.show()
-                            showMessage("切换中,请稍候")
-                            var tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.get("id").asInt)
-                            NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                                if (it) {
-                                    Log.d(TAG, "TCP.发送消息完成")
-                                } else {
-                                    Log.e(TAG, "TCP.发送消息失败")
-                                    HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                    CommonTool.createVerifyDialog(
+                        StringUtil.getResString(R.string.device_change_check),
+                        StringUtil.getResString(R.string.str_cancel),
+                        StringUtil.getResString(R.string.str_confirm),
+                        context,object : CommonTool.DialogInterface{
+                            override fun yes() {
+                                showMessage(R.string.device_change_tips)
+                                var tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.get("id").asInt)
+                                NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                                    if (it) {
+                                        Log.d(TAG, "TCP.发送消息完成")
+                                    } else {
+                                        Log.e(TAG, "TCP.发送消息失败")
+                                        HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                                    }
                                 }
-                                loadingDialog.dismiss()
                             }
-                        }
-                        override fun no() {
-                        }
-                    }).show()
+                            override fun no() {
+                            }
+                        }).show()
                 }
             } else {
                 binding.btnUserChange.visibility = View.GONE
@@ -115,7 +118,7 @@ class TakeoverItemAdapter(var data:ArrayList<JsonObject>, val context: Context)
                                 }
                             }*/
                         } catch (e: Exception) {
-                            showMessage("呼叫失败,请检查手机号")
+                            showMessage(R.string.call_phone_failed)
                         }
 
                         //直接呼叫

+ 22 - 17
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/TakeoverItemSearchAdapter.kt

@@ -27,6 +27,7 @@ import com.wdkl.ncs.android.middleware.tcp.channel.DeviceUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.PhoneUtil
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil
 import com.wdkl.ncs.android.middleware.tcp.enums.CommunicationEnum
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 
 class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, TakeoverItemSearchAdapter.ItemHolder> {
     val TAG = "TakeoverItem"
@@ -50,8 +51,8 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
 
     override fun onBindViewHolder(p0: ItemHolder, p1: Int) {
         val itemData = mDataList[p1]
-        p0.clerkName.text = "未知"
-        p0.phoneNumber.text = "暂无"
+        p0.clerkName.setText(R.string.str_null)
+        p0.phoneNumber.setText(R.string.str_empty)
         try {
             p0.clerkName.text = itemData.value
             p0.phoneNumber.text = itemData.number
@@ -62,22 +63,26 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
         if (Strings.isNullOrEmpty(Constants.userName)){
             p0.btnCallOut.visibility = View.GONE
             p0.btnUserChange.setOnClickListener {
-                CommonTool.createVerifyDialog("确认切换吗","取消","确定",context,object : CommonTool.DialogInterface{
-                    override fun yes() {
-                        showMessage("切换中,请稍候")
-                        var tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.id)
-                        NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
-                            if (it) {
-                                Log.d(TAG, "TCP.发送消息完成")
-                            } else {
-                                Log.e(TAG, "TCP.发送消息失败")
-                                HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                CommonTool.createVerifyDialog(
+                    StringUtil.getResString(R.string.device_change_check),
+                    StringUtil.getResString(R.string.str_cancel),
+                    StringUtil.getResString(R.string.str_confirm),
+                    context,object : CommonTool.DialogInterface{
+                        override fun yes() {
+                            showMessage(R.string.device_change_tips)
+                            val tcpModel = DeviceUtil.deviceChange(Constants.deviceId, itemData.id)
+                            NettyClient.instance.sendMsg(tcpModel.toJson()).subscribe {
+                                if (it) {
+                                    Log.d(TAG, "TCP.发送消息完成")
+                                } else {
+                                    Log.e(TAG, "TCP.发送消息失败")
+                                    HandleTcpConnect.instance.tcpReConnectWithMsgShow()
+                                }
                             }
                         }
-                    }
-                    override fun no() {
-                    }
-                }).show()
+                        override fun no() {
+                        }
+                    }).show()
             }
         } else {
             p0.btnUserChange.visibility = View.GONE
@@ -102,7 +107,7 @@ class TakeoverItemSearchAdapter : FuzzySearchBaseAdapter<ContactItemEntity, Take
                             }
                         }*/
                     } catch (e: Exception) {
-                        showMessage("呼叫失败,请检查手机号")
+                        showMessage(R.string.call_phone_failed)
                     }
 
                     //直接呼叫

+ 13 - 10
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/WatchCallRecordsItemAdapter.kt

@@ -14,6 +14,7 @@ import com.wdkl.ncs.android.lib.adapter.BaseDelegateAdapter
 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.TcpType
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 
 /**
  * 呼叫记录适配器
@@ -78,7 +79,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                 if (itemData.fromDeviceMemberId == Constants.memberId){
                     binding.sickbedTv.text = itemData.toFrameFullName
                     if (TextUtils.isEmpty(itemData.toMemberName)) {
-                        binding.nameTv.text = "To: 未知"
+                        binding.nameTv.text = "To: " + StringUtil.getResString(R.string.str_null)
                     } else {
                         binding.nameTv.text = "To: " + itemData.toMemberName
                     }
@@ -86,7 +87,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                 } else {
                     binding.sickbedTv.text = itemData.fromFrameFullName
                     if (TextUtils.isEmpty(itemData.fromMemberName)) {
-                        binding.nameTv.text = "From: 未知"
+                        binding.nameTv.text = "From: " + StringUtil.getResString(R.string.str_null)
                     } else {
                         binding.nameTv.text = "From: " + itemData.fromMemberName
                     }
@@ -118,11 +119,12 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                     binding.conductorNameTv.visibility = View.GONE
                     binding.playTv.setBackgroundResource(R.drawable.yi_bo_fang)
                     //检查是否自己发的留言
-                    if (itemData.fromDeviceMemberId == Constants.memberId) {
+                    /*if (itemData.fromDeviceMemberId == Constants.memberId) {
                         binding.processingTimeTv.text = "对方已播放"
                     } else {
                         binding.processingTimeTv.text = "已播放"
-                    }
+                    }*/
+                    binding.processingTimeTv.visibility = View.GONE
 
                 }else if(itemData.actionType == TcpType.VOICE.name || itemData.actionType == TcpType.PHONE.name){ //语音呼叫已接听
                     binding.projectTv.visibility = View.GONE
@@ -150,7 +152,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                 if(Constants.memberId != itemData.fromDeviceMemberId){
                     binding.sickbedTv.text = itemData.fromFrameFullName
                     if (TextUtils.isEmpty(itemData.fromMemberName)) {
-                        binding.nameTv.text = "From: 未知"
+                        binding.nameTv.text = "From: " + StringUtil.getResString(R.string.str_null)
                     } else {
                         binding.nameTv.text = "From: " + itemData.fromMemberName
                     }
@@ -158,7 +160,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                 }else{
                     binding.sickbedTv.text = itemData.toFrameFullName
                     if (TextUtils.isEmpty(itemData.toMemberName)) {
-                        binding.nameTv.text = "To: 未知"
+                        binding.nameTv.text = "To: " + StringUtil.getResString(R.string.str_null)
                     } else {
                         binding.nameTv.text = "To: " + itemData.toMemberName
                     }
@@ -170,7 +172,7 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                     binding.projectTv.visibility = View.VISIBLE
                     binding.projectTv.text = "SOS"
                     binding.projectTv.setBackgroundResource(R.drawable.sp_event_undo)
-                    binding.processingTimeTv.text = "未处理"
+                    binding.processingTimeTv.setText(R.string.event_undo)
                     binding.callStatusImagev.setImageResource(R.drawable.sos_96)
                 }else if(itemData.actionType == TcpType.EVENT.name){//事件未处理
                     binding.playTv.visibility = View.GONE
@@ -178,17 +180,18 @@ class WatchCallRecordsItemAdapter(val data: ArrayList<InteractionVO>) : BaseDele
                     binding.projectTv.text = itemData.data
                     binding.projectTv.setBackgroundResource(R.drawable.sp_event_undo)
                     binding.callStatusImagev.setImageResource(R.drawable.event_undo)
-                    binding.processingTimeTv.text = "未处理"
+                    binding.processingTimeTv.setText(R.string.event_undo)
                 }else if (itemData.actionType == TcpType.IM.name){//语音未播放
                     binding.projectTv.visibility = View.GONE
                     binding.playTv.visibility = View.VISIBLE
                     binding.playTv.setBackgroundResource(R.drawable.wei_bo_fang)
                     //检查是否自己发的留言
-                    if (itemData.fromDeviceMemberId == Constants.memberId) {
+                    /*if (itemData.fromDeviceMemberId == Constants.memberId) {
                         binding.processingTimeTv.text = "对方未播放"
                     } else {
                         binding.processingTimeTv.text = "未播放"
-                    }
+                    }*/
+                    binding.processingTimeTv.visibility = View.GONE
                 }else if(itemData.actionType == TcpType.VOICE.name || itemData.actionType == TcpType.PHONE.name){ //语音呼叫未接听
                     binding.projectTv.visibility = View.GONE
                     binding.playTv.visibility = View.GONE

+ 2 - 7
home/src/main/code/com/wdkl/ncs/android/component/home/adapter/WatchContactsItemAdapter.kt

@@ -66,11 +66,6 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
         holder.bind {
             binding ->
             val itemData = getItem(position)
-//            if(position == thisPosition){
-//                binding.itemRelayout.setBackgroundColor(Color.parseColor("#DCDCDC"))
-//            }else{
-//                binding.itemRelayout.setBackgroundColor(Color.parseColor("#ffffff"))
-//            }
             binding.roomNumberTv.text = itemData.frameFullName
             binding.nameTv.text = itemData.customerNamed
 
@@ -99,10 +94,10 @@ class WatchContactsItemAdapter(val data:ArrayList<WatchContactsVO>, val context:
                                     }
                                 }*/
                         } else {
-                            showMessage("呼叫失败,可能手机号异常")
+                            showMessage(R.string.call_phone_failed)
                         }
                     } catch (e: Exception) {
-                        showMessage("呼叫失败,请检查手机号")
+                        showMessage(R.string.call_phone_failed)
                     }
                 } else {
                     DeviceChannel.calling = true

+ 11 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/broadcast/BatteryBroadcastReceiver.java

@@ -6,12 +6,17 @@ import android.content.Context;
 import android.content.Intent;
 import android.widget.TextView;
 
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
+import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.lib.vo.MessageEvent;
 
 import org.greenrobot.eventbus.EventBus;
 
+import java.util.Locale;
+
 
 public class BatteryBroadcastReceiver extends BroadcastReceiver {
     private String TAG = BatteryBroadcastReceiver.class.getSimpleName();
@@ -31,8 +36,12 @@ public class BatteryBroadcastReceiver extends BroadcastReceiver {
             int power = level * 100 / scale;
             if (power<15){
                 if (Constants.Companion.getEVENT_BATTERY_ALARM()) {
-                    //SpeechUtil.getInstance().newSpeech("电池电量低,请注意!电池电量低,请注意!电池电量低,请注意!", false);
-                    SpeechUtil.getInstance().startSpeak("电池电量低,请注意!电池电量低,请注意!电池电量低,请注意!");
+                    String language = LocaleMangerUtils.getApplicationLocale().getLanguage();
+                    if (Locale.CHINESE.getLanguage().equals(language)) {
+                        SpeechUtil.getInstance().startSpeak("电池电量低,请注意!电池电量低,请注意!电池电量低,请注意!");
+                    } else {
+                        RingPlayHelper.playRingTone(context, R.raw.low_battery, false);
+                    }
                     Constants.Companion.setEVENT_BATTERY_ALARM(false);
                 }
             } else {

+ 0 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/di/HomeComponent.kt

@@ -22,8 +22,6 @@ interface HomeComponent {
 
     fun inject(activity: WatchCallRecordsActivity)
 
-    fun inject(activity: WatchEventDetailActivity)
-
     fun inject(activity: TakeoverActivity)
 
     fun inject(service: WdKeepAliveService)

+ 3 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/service/FloatingService.java

@@ -139,10 +139,10 @@ public class FloatingService extends Service {
                     if (!callResumed) {
                         resumeCallActivity();
                     } else {
-                        Toast.makeText(getApplicationContext(), "请稍后...", Toast.LENGTH_LONG).show();
+                        Toast.makeText(getApplicationContext(), R.string.wait_moment, Toast.LENGTH_LONG).show();
                     }
                 } else {
-                    Toast.makeText(getApplicationContext(), "请勿频繁点击", Toast.LENGTH_LONG).show();
+                    Toast.makeText(getApplicationContext(), R.string.wait_moment, Toast.LENGTH_LONG).show();
                 }
                 clickTime = System.currentTimeMillis();
             }
@@ -154,7 +154,7 @@ public class FloatingService extends Service {
         Intent intent = new Intent(FloatingService.this, CallSingleActivity.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
         startActivity(intent);
-        Toast.makeText(getApplicationContext(), "恢复通话", Toast.LENGTH_LONG).show();
+        Toast.makeText(getApplicationContext(), "Resume", Toast.LENGTH_LONG).show();
     }
 
     //开始触控的坐标,移动时的坐标(相对于屏幕左上角的坐标)

+ 3 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/service/PhoneStateReceiver.java

@@ -8,6 +8,7 @@ import android.telephony.SmsMessage;
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.activity.SmsReceivedActivity;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.AppUtils;
@@ -131,7 +132,7 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                         }
                     }
                     //循环结束,说明来电号码不在白名单内,挂断来电
-                    showMessage("非法号码:" + extraIncomingNumber);
+                    showMessage(context.getString(R.string.invalid_phone_number, extraIncomingNumber));
                     boolean res = PhoneCallUtil.endCall(context);
                     Log.d(TAG, "end call result: " + res);
                     PhoneCallUtil.deleteCallLog(context, extraIncomingNumber);
@@ -178,7 +179,7 @@ public class PhoneStateReceiver extends BroadcastReceiver {
                         }
                     }
                     //循环结束,说明来电号码不在白名单内,挂断来电
-                    showMessage("非法号码:" + extraIncomingNumber);
+                    showMessage(context.getString(R.string.invalid_phone_number, extraIncomingNumber));
                     Constants.Companion.setPhoneState(Constants.PHONE_IDLE);
                     boolean res = PhoneCallUtil.endCall(context);
                     Log.d(TAG, "end call result: " + res);

+ 34 - 12
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -47,6 +47,7 @@ import com.wdkl.ncs.android.middleware.tcp.enums.TcpAction
 import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.utils.CommonUtils
 import com.wdkl.ncs.android.middleware.utils.ContactHelper
+import com.wdkl.ncs.android.middleware.utils.StringUtil
 import com.wdkl.ncs.keepbackground.work.AbsWorkService
 import com.wdkl.rtc.rtc.AudioFocusManager
 import org.greenrobot.eventbus.EventBus
@@ -90,6 +91,8 @@ class WdKeepAliveService : AbsWorkService() {
         }
     }
 
+    private var language = "zh"
+
     override fun startWork() {
         if (!EventBus.getDefault().isRegistered(this)) {
             EventBus.getDefault().register(this)
@@ -142,6 +145,8 @@ class WdKeepAliveService : AbsWorkService() {
         initMediaSession()
 
         //setDefaultLauncher()
+
+        language = LocaleMangerUtils.getApplicationLocale().language
     }
 
     private fun setDefaultLauncher() {
@@ -391,7 +396,11 @@ class WdKeepAliveService : AbsWorkService() {
                                 }
 
                                 Util.wakeUpAndUnlock()
-                                SoundPoolManager.getInstance().playSound(1)
+                                if (Locale.CHINESE.getLanguage().equals(language)) {
+                                    SoundPoolManager.getInstance().playSound(1)
+                                } else {
+                                    SoundPoolManager.getInstance().playSound(4)
+                                }
 
                                 val intent = Intent()
                                 intent.setClass(this, NewEventListActivity::class.java)
@@ -529,9 +538,9 @@ class WdKeepAliveService : AbsWorkService() {
                     }
 
                     if (!Strings.isNullOrEmpty(sosInteractionVO.toRoleName)) {
-                        showMessage(sosInteractionVO.toRoleName + " " + sosInteractionVO.toMemberName + " 已响应")
+                        showMessage(sosInteractionVO.toRoleName + " " + sosInteractionVO.toMemberName + " " + StringUtil.getResString(R.string.event_responded))
                     } else {
-                        showMessage("已响应")
+                        showMessage(R.string.event_responded)
                     }
 
                     var iterator = Constants.eventList.iterator()
@@ -750,7 +759,11 @@ class WdKeepAliveService : AbsWorkService() {
 
     private fun eventSpeechOut(model: TcpModel) {
         if (model.type == TcpType.IM && model.action == TcpAction.IMAction.MSG) {
-            SoundPoolManager.getInstance().playSound(1)
+            if (Locale.CHINESE.getLanguage().equals(language)) {
+                SoundPoolManager.getInstance().playSound(1)
+            } else {
+                SoundPoolManager.getInstance().playSound(4)
+            }
             return
         }
 
@@ -771,8 +784,11 @@ class WdKeepAliveService : AbsWorkService() {
             val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ", " + interactionVO.data
 
             if (Constants.ttsState == 2) {
-                //SpeechUtil.getInstance().newSpeech("您有新的事件待处理, " + eventStr, false)
-                SpeechUtil.getInstance().startSpeak("您有新的事件待处理, " + eventStr)
+                if (Locale.CHINESE.getLanguage().equals(language)) {
+                    SpeechUtil.getInstance().startSpeak("您有新的事件待处理, " + eventStr)
+                } else {
+                    RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.event, false)
+                }
             } else {
                 //MediaPlayHelper.getInstance().playResMusic(R.raw.new_event, 1.0f, false)
                 RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.new_event, false)
@@ -783,7 +799,8 @@ class WdKeepAliveService : AbsWorkService() {
                 RingPlayHelper.playRingTone(BaseApplication.appContext, R.raw.sos, false)
             }
         } else if (model.type == TcpType.EVENT && model.action == TcpAction.EventAction.CANCEL) { // 事件取消
-            val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ",已取消 " + interactionVO.data + "事件"
+            val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ", " +
+                    interactionVO.data + StringUtil.getResString(R.string.str_event_cancel)
 
             if (Constants.ttsState == 2) {
                 //SpeechUtil.getInstance().newSpeech(eventStr, false)
@@ -795,7 +812,8 @@ class WdKeepAliveService : AbsWorkService() {
                 }
             }
         } else if (model.type == TcpType.EVENT && model.action == TcpAction.EventAction.COMPLETED) { //事件完成
-            val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ", " + interactionVO.data + "事件已完成"
+            val eventStr = Util.appendSpace(interactionVO.fromFrameFullName.replace("-", ",")) + ", " +
+                    interactionVO.data + StringUtil.getResString(R.string.str_event_done)
 
             if (Constants.ttsState == 2) {
                 //SpeechUtil.getInstance().newSpeech(eventStr, false)
@@ -823,7 +841,7 @@ class WdKeepAliveService : AbsWorkService() {
     private fun playVoiceMsg(interactionVO: InteractionVO) {
         //synchronized(this) {
             //channelImList.clear()
-            showMessage("播放留言...")
+            showMessage(R.string.str_voice_msg_play)
             MediaPlayHelper.getInstance().stopMusic(true)
             SoundPoolManager.getInstance().playSound(4)
             MediaPlayHelper.getInstance().playUrlMusic(ApiManager.urlManager.device_url + interactionVO.data, 1f, false)
@@ -941,7 +959,7 @@ class WdKeepAliveService : AbsWorkService() {
                                     //通话中或者某些特定界面不响应耳机按键留言,未绑定用户时也不响应按键
                                     else if (!DeviceChannel.calling && Constants.allowVoiceMsg && !TextUtils.isEmpty(Constants.userName)) {
                                         if (Constants.channelId == -1) {
-                                            showMessage("请先建立频道")
+                                            showMessage(R.string.str_im_no_channel)
                                         } else {
                                             RecordHelper.getInstance().execRecordVoiceMsg()
                                         }
@@ -955,9 +973,13 @@ class WdKeepAliveService : AbsWorkService() {
                                             if (!warningTips) {
                                                 warningTips = true
                                                 keepHandler.sendEmptyMessageDelayed(0, 3000)
-                                                SoundPoolManager.getInstance().playSound(5)
+                                                if (Locale.CHINESE.getLanguage().equals(language)) {
+                                                    SoundPoolManager.getInstance().playSound(5)
+                                                } else {
+                                                    SoundPoolManager.getInstance().playSound(6)
+                                                }
                                             }
-                                            showMessage("请使用屏幕按钮留言")
+                                            showMessage(R.string.str_im_media_button_unuseful)
                                         }
                                     }
                                 }

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

@@ -21,6 +21,28 @@ public class SettingConfig {
     private static final String KEY_SP_OPERATOR_NUMBER = "KEY_SP_OPERATOR_NUMBER";
 
 
+    //默认语言
+    private static final String KEY_LANGUAGE_ID = "KEY_LANGUAGE_ID";
+    private static final String KEY_LANGUAGE_MODE = "KEY_LANGUAGE_MODE";
+
+    public static int getLanguageId(Context context) {
+        //0--auto, 1--English, 2--中文, 3--西班牙语, 4--俄语
+        return getSP(context).getInt(KEY_LANGUAGE_ID, 0);
+    }
+
+    public static void setLanguageId(Context context, int id) {
+        getEditor(context).putInt(KEY_LANGUAGE_ID, id).apply();
+    }
+
+    public static int getLanguageMode(Context context) {
+        return getSP(context).getInt(KEY_LANGUAGE_MODE, 0);
+    }
+
+    public static void setLanguageMode(Context context, int mode) {
+        getEditor(context).putInt(KEY_LANGUAGE_MODE, mode).apply();
+    }
+
+
     /**
      * 获取转发时间
      *

+ 8 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/ui/CallSingleActivity.java

@@ -30,9 +30,11 @@ import com.enation.javashop.utils.base.widget.LoadingDialog;
 import com.google.gson.Gson;
 import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.service.FloatingService;
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.ActivityStackUtil;
 import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
 import com.wdkl.ncs.android.component.home.util.HomeWatcher;
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
 import com.wdkl.ncs.android.component.home.util.LogUpload;
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.home.util.RecordHelper;
@@ -109,6 +111,10 @@ public class CallSingleActivity extends AppCompatActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
+        //切换语言
+        int languageId = SettingConfig.getLanguageId(this);
+        LocaleMangerUtils.setApplicationLanguageByIndex(this, languageId);
+
         super.onCreate(savedInstanceState);
         setStatusBarOrScreenStatus(this);
         setContentView(R.layout.activity_single_call);
@@ -139,7 +145,7 @@ public class CallSingleActivity extends AppCompatActivity {
             perms = new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA};
         }
         if (!EasyPermissions.hasPermissions(CallSingleActivity.this, perms)) {
-            EasyPermissions.requestPermissions(CallSingleActivity.this, "需要相机和录音权限",
+            EasyPermissions.requestPermissions(CallSingleActivity.this, "need record, camera permissions",
                     100, perms);
         } else {
             //初始化 engine
@@ -177,7 +183,7 @@ public class CallSingleActivity extends AppCompatActivity {
         //先检查权限
         if (Build.VERSION.SDK_INT >= 23) {
             if (!Settings.canDrawOverlays(this)) {
-                Toast.makeText(CallSingleActivity.this, "请开启悬浮窗权限", Toast.LENGTH_LONG).show();
+                Toast.makeText(CallSingleActivity.this, "need floating window permission", Toast.LENGTH_LONG).show();
                 return;
             }
         }

+ 10 - 5
home/src/main/code/com/wdkl/ncs/android/component/home/ui/FragmentAudio.java

@@ -20,6 +20,7 @@ import com.google.gson.Gson;
 import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.component.home.util.HandleTcpConnect;
+import com.wdkl.ncs.android.component.home.util.LocaleMangerUtils;
 import com.wdkl.ncs.android.component.home.util.MediaPlayHelper;
 import com.wdkl.ncs.android.component.home.util.RingPlayHelper;
 import com.wdkl.ncs.android.component.home.util.SpeechUtil;
@@ -29,12 +30,15 @@ import com.wdkl.ncs.android.middleware.model.vo.InteractionVO;
 import com.wdkl.ncs.android.middleware.tcp.NettyClient;
 import com.wdkl.ncs.android.middleware.tcp.channel.VoiceUtil;
 import com.wdkl.ncs.android.middleware.tcp.dto.TcpModel;
+import com.wdkl.ncs.android.middleware.utils.StringUtil;
 import com.wdkl.rtc.entity.Publisher;
 import com.wdkl.rtc.entity.Room;
 import com.wdkl.rtc.rtc.WebRTCEngine;
 import com.wdkl.rtc.util.EnumType;
 import com.wdkl.rtc.util.OSUtils;
 
+import java.util.Locale;
+
 /**
  * 语音通话控制界面
  */
@@ -102,12 +106,12 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
         } else {
             // 如果未接通
             if (isOutgoing) {
-                descTextView.setText("正在向 "+getShowName()+" 请求通话");
+                descTextView.setText(getShowName() + "\n" + StringUtil.getResString(R.string.call_in_calling));
                 outgoingActionContainer.setVisibility(View.VISIBLE);
                 incomingActionContainer.setVisibility(View.GONE);
                 //MediaPlayHelper.getInstance().playResMusic(R.raw.outgoing_call, 0.8f, true);
             } else {
-                descTextView.setText(getShowName() + " 请求通话");
+                descTextView.setText(getShowName() + "\n" + StringUtil.getResString(R.string.call_incoming));
                 outgoingActionContainer.setVisibility(View.GONE);
                 incomingActionContainer.setVisibility(View.VISIBLE);
 
@@ -123,8 +127,9 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                     }
 
                     if (!TextUtils.isEmpty(frameName)) {
-                        //SpeechUtil.getInstance().newSpeech(frameName + "来电, " + frameName + "来电, " + frameName + "来电", false);
-                        SpeechUtil.getInstance().startSpeak(frameName + "来电, " + frameName + "来电, " + frameName + "来电");
+                        if (Locale.CHINESE.getLanguage().equals(LocaleMangerUtils.getApplicationLocale().getLanguage())) {
+                            SpeechUtil.getInstance().startSpeak(frameName + "来电, " + frameName + "来电, " + frameName + "来电");
+                        }
                     }
                 }
             }
@@ -276,7 +281,7 @@ public class FragmentAudio extends SingleCallFragment implements View.OnClickLis
                 }
             } else if (msg.what == CHECK) {
                 if (callSingleActivity!=null && callSingleActivity.janusClient.getCallState()!= EnumType.CallState.Connected && !isHandoff){
-                    Toast.makeText(callSingleActivity, "当前网络状况不佳", Toast.LENGTH_LONG).show();
+                    Toast.makeText(callSingleActivity, R.string.call_disconnect, Toast.LENGTH_LONG).show();
                 }
             } else if (msg.what == CALL) {
                 currentState = callSingleActivity.janusClient.getCallState();

+ 15 - 15
home/src/main/code/com/wdkl/ncs/android/component/home/ui/SingleCallFragment.java

@@ -224,13 +224,13 @@ public abstract class SingleCallFragment extends Fragment {
         runOnUiThread(new Runnable() {
             @Override
             public void run() {
-                Toast.makeText(SingleCallFragment.this.getContext(), "呼叫成功", Toast.LENGTH_SHORT).show();
+                Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_success, Toast.LENGTH_SHORT).show();
             }
         });
     }
 
     // ======================================界面回调================================
-    public void didCallEndWithReason(EnumType.CallEndReason callEndReason) {
+    /*public void didCallEndWithReason(EnumType.CallEndReason callEndReason) {
         switch (callEndReason) {
             case Busy: {
                 tvStatus.setText("对方忙线中");
@@ -280,7 +280,7 @@ public abstract class SingleCallFragment extends Fragment {
             }
 
         }, 11);
-    }
+    }*/
 
     public void didChangeState(EnumType.CallState state) {
 
@@ -354,7 +354,7 @@ public abstract class SingleCallFragment extends Fragment {
                     break;
                 case WHAT_DELAY_CHECK_CALL:
                     if (callSingleActivity != null && !callSuccess) {
-                        Toast.makeText(SingleCallFragment.this.getContext(), "服务器无响应,请检查网络状态!", Toast.LENGTH_SHORT).show();
+                        Toast.makeText(SingleCallFragment.this.getContext(), R.string.net_error, Toast.LENGTH_SHORT).show();
                     }
                     break;
                 case FINISH_CURRENT:
@@ -414,7 +414,7 @@ public abstract class SingleCallFragment extends Fragment {
                 runOnUiThread(new Runnable() {
                     @Override
                     public void run() {
-                        Toast.makeText(SingleCallFragment.this.getContext(),"对方已离开",Toast.LENGTH_SHORT).show();
+                        Toast.makeText(SingleCallFragment.this.getContext(),R.string.call_end,Toast.LENGTH_SHORT).show();
                     }
                 });
             }
@@ -424,7 +424,7 @@ public abstract class SingleCallFragment extends Fragment {
             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    Toast.makeText(SingleCallFragment.this.getContext(), "创建通话错误", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(SingleCallFragment.this.getContext(), "Room error", Toast.LENGTH_SHORT).show();
                 }
             });
 
@@ -439,7 +439,7 @@ public abstract class SingleCallFragment extends Fragment {
             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    Toast.makeText(SingleCallFragment.this.getContext(), "连接超时", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(SingleCallFragment.this.getContext(), "Connect timeout", Toast.LENGTH_SHORT).show();
                 }
             });
 
@@ -455,7 +455,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "连接超时,请重试", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), "Connect timeout", Toast.LENGTH_SHORT).show();
                         }
                     });
 
@@ -476,7 +476,7 @@ public abstract class SingleCallFragment extends Fragment {
             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    Toast.makeText(SingleCallFragment.this.getContext(), "对方离开", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_end, Toast.LENGTH_SHORT).show();
                 }
             });
 
@@ -486,7 +486,7 @@ public abstract class SingleCallFragment extends Fragment {
             runOnUiThread(new Runnable() {
                 @Override
                 public void run() {
-                    Toast.makeText(SingleCallFragment.this.getContext(), "网络情况差", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(SingleCallFragment.this.getContext(), R.string.net_error, Toast.LENGTH_SHORT).show();
                 }
             });
         }
@@ -517,7 +517,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "对方挂断", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_end, Toast.LENGTH_SHORT).show();
                         }
                     });
 
@@ -530,7 +530,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "对方拒绝", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_reject, Toast.LENGTH_SHORT).show();
                         }
                     });
                 }
@@ -540,7 +540,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "对方通话中", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_busy, Toast.LENGTH_SHORT).show();
                         }
                     });
                 }
@@ -550,7 +550,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "呼叫失败,对方可能不在线", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.call_failed, Toast.LENGTH_SHORT).show();
                         }
                     });
                 //}
@@ -560,7 +560,7 @@ public abstract class SingleCallFragment extends Fragment {
                     runOnUiThread(new Runnable() {
                         @Override
                         public void run() {
-                            Toast.makeText(SingleCallFragment.this.getContext(), "取消", Toast.LENGTH_SHORT).show();
+                            Toast.makeText(SingleCallFragment.this.getContext(), R.string.str_cancel, Toast.LENGTH_SHORT).show();
                         }
                     });
                 }

+ 140 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/LanguageSetDialogHelper.java

@@ -0,0 +1,140 @@
+package com.wdkl.ncs.android.component.home.util;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.os.Handler;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.Spinner;
+import android.widget.Toast;
+
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
+
+
+public class LanguageSetDialogHelper {
+
+    private static AlertDialog dialog;
+    private static int selectIndex;
+
+    public static void showDialog(final Activity activity) {
+        if (dialog != null && dialog.isShowing()) {
+            return;
+        }
+
+        final int originIndex = LocaleMangerUtils.getCurrentLocaleIndex();
+        selectIndex = originIndex;
+
+        View contentView = LayoutInflater.from(activity).inflate(R.layout.language_set_dialog, null);
+        AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+        builder.setView(contentView);
+
+        RadioButton btnYes = contentView.findViewById(R.id.rb_language_yes);
+        RadioButton btnNo = contentView.findViewById(R.id.rb_language_no);
+        final int mode = SettingConfig.getLanguageMode(activity);
+        if (mode == 0) {
+            btnYes.setChecked(true);
+        } else {
+            btnNo.setChecked(true);
+        }
+
+        Button buttonCancel = contentView.findViewById(R.id.cancel_button);
+        Button buttonConfirm = contentView.findViewById(R.id.confirm_button);
+        Spinner spinner = contentView.findViewById(R.id.spinner_language_select);
+        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(activity,
+                R.array.language_list, R.layout.spinner_item);
+        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+        spinner.setAdapter(adapter);
+        spinner.setSelection(originIndex);
+        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                Log.d("languageId", "pos: " + position + ", originIndex: " + originIndex);
+                selectIndex = position;
+            }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> parent) {
+
+            }
+        });
+
+        RadioGroup languageGroup = contentView.findViewById(R.id.group_language_mode);
+        languageGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(RadioGroup group, int checkedId) {
+                if (checkedId == R.id.rb_language_yes) {
+                    SettingConfig.setLanguageMode(activity, 0);
+                } else {
+                    SettingConfig.setLanguageMode(activity, 1);
+                }
+            }
+        });
+
+        buttonCancel.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (dialog != null) {
+                    dialog.dismiss();
+                }
+            }
+        });
+
+        buttonConfirm.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                SettingConfig.setLanguageId(activity, selectIndex);
+
+                if (SettingConfig.getLanguageMode(activity) == 1) {
+                    if (selectIndex != originIndex) {
+                        Toast.makeText(activity, "restart now...", Toast.LENGTH_LONG).show();
+                        new Handler().postDelayed(new Runnable() {
+                            @Override
+                            public void run() {
+                                AppUtils.restartApp();
+                            }
+                        }, 3000);
+                    }
+                } else {
+                    Toast.makeText(activity, "restart now...", Toast.LENGTH_LONG).show();
+                    new Handler().postDelayed(new Runnable() {
+                        @Override
+                        public void run() {
+                            AppUtils.restartApp();
+                        }
+                    }, 3000);
+                }
+
+                if (dialog != null) {
+                    dialog.dismiss();
+                }
+            }
+        });
+
+        dialog = builder.create();
+        //dialog.setCanceledOnTouchOutside(false);
+        //dialog.setCancelable(false);
+        dialog.show();
+
+        //设置dialog宽高及位置
+        try {
+            Window window = dialog.getWindow();
+            WindowManager.LayoutParams lp = window.getAttributes();
+            lp.width = WindowManager.LayoutParams.MATCH_PARENT;
+            lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
+            lp.gravity = Gravity.CENTER;
+            window.setAttributes(lp);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 83 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/util/LocaleMangerUtils.java

@@ -0,0 +1,83 @@
+package com.wdkl.ncs.android.component.home.util;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+import android.util.DisplayMetrics;
+import android.util.Log;
+
+import androidx.annotation.RequiresApi;
+
+import com.wdkl.ncs.android.component.home.R;
+import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+import java.util.Locale;
+
+public class LocaleMangerUtils {
+
+    public static Locale getSystemLocale() {
+        return Locale.getDefault();
+    }
+
+    //获取当前语言id: 0--auto, 1--English, 2--中文, 3--西班牙语, 4--俄语
+    public static int getCurrentLocaleIndex() {
+        int languageSize = BaseApplication.appContext.getResources().getStringArray(R.array.language_list).length;
+        int index = SettingConfig.getLanguageId(BaseApplication.appContext);
+        //Log.d("wzl", "current language index: " + index);
+        if (index >= 0 && index <languageSize) {
+            return index;
+        } else {
+            return 0;
+        }
+    }
+
+    public static void setApplicationLanguageByIndex(Context context, int index) {
+        Locale locale = Locale.getDefault();
+        switch (index) {
+            case 0:
+                //
+                break;
+            case 1:
+                locale = Locale.ENGLISH;
+                break;
+            case 2:
+                locale = Locale.CHINESE;
+                break;
+            case 3:
+                locale = new Locale("es");
+                break;
+            case 4:
+                locale = new Locale("ru");
+                break;
+        }
+
+        setApplicationLanguage(context, locale);
+    }
+
+    public static void setApplicationLanguage(Context context, Locale locale) {
+        Log.d("locale", "set locale language: " + locale.getLanguage());
+        Configuration configuration = context.getResources().getConfiguration();
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            configuration.setLocale(locale);
+        } else {
+            configuration.locale = locale;
+        }
+        // 更新context中的语言设置
+        Resources resources = context.getResources();
+        DisplayMetrics dm = resources.getDisplayMetrics();
+        resources.updateConfiguration(configuration, dm);
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.N)
+    public static Locale getApplicationLocale() {
+        Configuration config = BaseApplication.appContext.getResources().getConfiguration();
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            return config.locale;
+        } else {
+            return config.getLocales().get(0);
+        }
+    }
+
+}

+ 2 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/util/PasswordDialogHelper.java

@@ -56,7 +56,7 @@ public class PasswordDialogHelper {
                 } else {
                     pwd = "";
                     password.setText(pwd);
-                    password.setHint("请输密码");
+                    password.setHint(R.string.input_password);
                 }
             }
         });
@@ -77,7 +77,7 @@ public class PasswordDialogHelper {
                     }
                     dismissCallDialog();
                 } else {
-                    Toast.makeText(activity, "密码错误", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(activity, R.string.invalid_password, Toast.LENGTH_SHORT).show();
                 }
             }
         });

+ 4 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/util/PhoneNumberDialogHelper.java

@@ -19,6 +19,7 @@ import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig;
 import com.wdkl.ncs.android.lib.utils.ExtendMethodsKt;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.utils.ContactHelper;
+import com.wdkl.ncs.android.middleware.utils.StringUtil;
 
 
 public class PhoneNumberDialogHelper {
@@ -37,7 +38,7 @@ public class PhoneNumberDialogHelper {
         TextView send = contentView.findViewById(R.id.btn_send);
         TextView call = contentView.findViewById(R.id.btn_call);
 
-        phoneNum.setText("本机号码: " + ContactHelper.getPhoneNumber());
+        phoneNum.setText(StringUtil.getResString(R.string.phone_number_title) + ": " + ContactHelper.getPhoneNumber());
         operator.setText(SettingConfig.getOperatorNumber(activity));
         smsCmd.setText(SettingConfig.getSmsCommand(activity));
 
@@ -63,14 +64,14 @@ public class PhoneNumberDialogHelper {
                         smsManager.sendTextMessage(number, null, cmd, null, null);
                     } catch (Exception e) {
                         e.printStackTrace();
-                        ExtendMethodsKt.showMessage("短信发送异常");
+                        ExtendMethodsKt.showMessage("send sms error");
                     }
 
                     Constants.Companion.setSmsCheck(true);
 
                     dismissCallDialog();
                 } else {
-                    ExtendMethodsKt.showMessage("运营商号码或短信指令为空");
+                    ExtendMethodsKt.showMessage(R.string.send_sms_number_empty);
                 }
             }
         });

+ 29 - 13
home/src/main/code/com/wdkl/ncs/android/component/home/util/RecordHelper.java

@@ -14,6 +14,7 @@ import android.util.Log;
 
 import androidx.annotation.NonNull;
 
+import com.wdkl.ncs.android.component.home.R;
 import com.wdkl.ncs.android.component.home.helper.HttpHelper;
 import com.wdkl.ncs.android.lib.base.BaseApplication;
 import com.wdkl.ncs.android.lib.vo.MessageEvent;
@@ -30,6 +31,7 @@ import org.greenrobot.eventbus.EventBus;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Locale;
 
 import static com.wdkl.ncs.android.lib.utils.ExtendMethodsKt.showMessage;
 
@@ -48,6 +50,8 @@ public class RecordHelper {
     private final UrlManager urlManager = UrlManager.Companion.build();
     private AudioManager audioManager;
 
+    private String language = "zh";
+
     private final static Object lock = new Object();
 
     private final Handler handler = new Handler(Looper.getMainLooper()) {
@@ -82,6 +86,8 @@ public class RecordHelper {
     }
 
     public void startRecord() {
+        language = LocaleMangerUtils.getApplicationLocale().getLanguage();
+
         //如果正在录音则先停止录音
         if (recording) {
             stopRecord();
@@ -148,14 +154,18 @@ public class RecordHelper {
         //连续点击2次开始留言
         long curTime = System.currentTimeMillis();
         if (!recordRunning && curTime - clickTime > 200 && curTime - clickTime < 1500 && curTime - pressDownTime > 3500 && curTime - pressUpTime > 2500) {
-            showMessage("开始留言");
+            showMessage(R.string.str_voice_msg_start);
             //先停止其他语音或铃声
             RingPlayHelper.stopRingTone();
             SpeechUtil.getInstance().stopSpeak();
             MediaPlayHelper.getInstance().stopMusic(true);
             //EventBus.getDefault().post(new MessageEvent(false, Constants.EVENT_CLEAR_IM));
             //播放提示
-            SoundPoolManager.getInstance().playSound(2);
+            if (Locale.CHINESE.getLanguage().equals(language)) {
+                SoundPoolManager.getInstance().playSound(2);
+            } else {
+                SoundPoolManager.getInstance().playSound(7);
+            }
             recordRunning = true;
             pressDownTime = curTime;
             handler.removeCallbacksAndMessages(null);
@@ -167,7 +177,7 @@ public class RecordHelper {
                 stopRecord();
                 if (Math.abs(pressUpTime - pressDownTime) <= 2000) {
                     deleteAudioFile(audiofilePath);
-                    showMessage("说话时间太短");
+                    showMessage(R.string.str_voice_msg_record_loss);
                     SoundPoolManager.getInstance().playSound(6);
                 } else {
                     sendChannelVoiceMsg(audiofilePath);
@@ -186,14 +196,18 @@ public class RecordHelper {
     public void execRecordVoiceBt() {
         long timeMillis = System.currentTimeMillis();
         if (!recordRunning) {
-            showMessage("开始留言");
+            showMessage(R.string.str_voice_msg_start);
             //先停止其他语音或铃声
             RingPlayHelper.stopRingTone();
             SpeechUtil.getInstance().stopSpeak();
             MediaPlayHelper.getInstance().stopMusic(true);
             //EventBus.getDefault().post(new MessageEvent(false, Constants.EVENT_CLEAR_IM));
             //播放提示
-            SoundPoolManager.getInstance().playSound(2);
+            if (Locale.CHINESE.getLanguage().equals(language)) {
+                SoundPoolManager.getInstance().playSound(2);
+            } else {
+                SoundPoolManager.getInstance().playSound(7);
+            }
             recordRunning = true;
             pressDownTime = timeMillis;
             handler.removeCallbacksAndMessages(null);
@@ -205,7 +219,7 @@ public class RecordHelper {
                 stopRecord();
                 if (Math.abs(pressUpTime - pressDownTime) <= 2000) {
                     deleteAudioFile(audiofilePath);
-                    showMessage("说话时间太短");
+                    showMessage(R.string.str_voice_msg_record_loss);
                     SoundPoolManager.getInstance().playSound(6);
                 } else {
                     sendChannelVoiceMsg(audiofilePath);
@@ -221,7 +235,7 @@ public class RecordHelper {
             HttpHelper.upload( urlManager.getDevice_url()+ "ncs/upload/file", new File(file), new HttpHelper.UploadCallback() {
                 @Override
                 public void onFail() {
-                    showMessage("留言失败");
+                    showMessage(R.string.str_voice_msg_send_fail);
                 }
 
                 @SuppressLint("CheckResult")
@@ -229,17 +243,19 @@ public class RecordHelper {
                 public void onSuccess(String data) {
                     //上传完成后删除本地文件
                     deleteAudioFile(file);
-                    SoundPoolManager.getInstance().playSound(3);
+                    if (Locale.CHINESE.getLanguage().equals(language)) {
+                        SoundPoolManager.getInstance().playSound(3);
+                    }
                     ChannelImDO channelImDO = new ChannelImDO();
                     channelImDO.setChannelId(Constants.Companion.getChannelId());
                     channelImDO.setSenderMemberId(Constants.Companion.getMemberId());
                     channelImDO.setAudioPath(data);
                     TcpModel tcpModel = ChannelImUtil.channelImMsg(Constants.Companion.getDeviceId(), channelImDO);
                     NettyClient.Companion.getInstance().sendMsg(tcpModel.toJson()).subscribe(it-> {
-                        if (it){
-                            showMessage("留言发送成功!");
+                        if (it) {
+                            showMessage(R.string.str_voice_msg_send_success);
                         } else {
-                            showMessage("留言发送失败!");
+                            showMessage(R.string.str_voice_msg_send_fail);
                         }
                     });
                 }
@@ -255,12 +271,12 @@ public class RecordHelper {
             recordRunning = false;
 
             if (cancel) {
-                showMessage("留言取消");
+                showMessage(R.string.str_voice_msg_record_cancel);
                 deleteAudioFile(audiofilePath);
             } else {
                 if (Math.abs(pressUpTime - pressDownTime) <= 2000) {
                     deleteAudioFile(audiofilePath);
-                    showMessage("说话时间太短");
+                    showMessage(R.string.str_voice_msg_record_loss);
                     SoundPoolManager.getInstance().playSound(6);
                 } else {
                     sendChannelVoiceMsg(audiofilePath);

+ 3 - 3
home/src/main/code/com/wdkl/ncs/android/component/home/util/ServerConfigDialogHelper.java

@@ -64,7 +64,7 @@ public class ServerConfigDialogHelper {
                 } else {
                     pwd = "";
                     password.setText(pwd);
-                    password.setHint("请输入密码");
+                    password.setHint(R.string.input_password);
                 }
             }
         });
@@ -83,7 +83,7 @@ public class ServerConfigDialogHelper {
                     llPwd.setVisibility(View.GONE);
                     llServer.setVisibility(View.VISIBLE);
                 } else {
-                    Toast.makeText(activity, "密码错误", Toast.LENGTH_SHORT).show();
+                    Toast.makeText(activity, R.string.invalid_password, Toast.LENGTH_SHORT).show();
                 }
             }
         });
@@ -104,7 +104,7 @@ public class ServerConfigDialogHelper {
                 String url = editUrl.getText().toString();
                 String port = editPort.getText().toString();
                 if (TextUtils.isEmpty(url) || TextUtils.isEmpty(port)) {
-                    ExtendMethodsKt.showMessage("参数不能为空");
+                    ExtendMethodsKt.showMessage(R.string.input_empty);
                 } else {
                     //保存配置
                     CommonUtils.setUrl(BaseApplication.appContext, url);

+ 3 - 2
home/src/main/code/com/wdkl/ncs/android/component/home/util/SoundPoolManager.java

@@ -28,7 +28,7 @@ public class SoundPoolManager {
         if(Build.VERSION.SDK_INT > 21){
             SoundPool.Builder builder = new SoundPool.Builder();
             //传入音频数量
-            builder.setMaxStreams(6);
+            builder.setMaxStreams(7);
             //AudioAttributes是一个封装音频各种属性的方法
             AudioAttributes.Builder attrBuilder = new AudioAttributes.Builder();
             //设置音频流的合适的属性
@@ -37,7 +37,7 @@ public class SoundPoolManager {
             builder.setAudioAttributes(attrBuilder.build());
             soundPool = builder.build();
         }else{
-            soundPool = new SoundPool(6, AudioManager.STREAM_SYSTEM, 0);
+            soundPool = new SoundPool(7, AudioManager.STREAM_SYSTEM, 0);
         }
 
         soundID.put(1, soundPool.load(BaseApplication.appContext, R.raw.new_msg, 1));
@@ -46,6 +46,7 @@ public class SoundPoolManager {
         soundID.put(4, soundPool.load(BaseApplication.appContext, R.raw.ding, 1));
         soundID.put(5, soundPool.load(BaseApplication.appContext, R.raw.im_disable, 1));
         soundID.put(6, soundPool.load(BaseApplication.appContext, R.raw.dong, 1));
+        soundID.put(7, soundPool.load(BaseApplication.appContext, R.raw.im_start, 1));
 
         soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
             @Override

+ 2 - 2
home/src/main/res/layout/activity_app_update.xml

@@ -13,7 +13,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_centerInParent="true"
-            android:text="正在升级中,请勿操作..."
+            android:text="@string/updating"
             android:textColor="#3D3D63"
             android:textSize="18sp" />
 
@@ -29,7 +29,7 @@
             app:isShowDesc="false"
             app:max="100"
             app:progress="0"
-            app:progressDesc="进度:"
+            app:progressDesc="progress:"
             app:progressRadius="10dp" />
 
     </RelativeLayout>

+ 1 - 1
home/src/main/res/layout/activity_channel_im_list.xml

@@ -36,7 +36,7 @@
                 android:id="@+id/tv_channel_text"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="按住说话"
+                android:text="@string/str_voice_msg_btn_text"
                 android:textColor="#B4B4B4"
                 android:textSize="16sp"/>
 

+ 1 - 1
home/src/main/res/layout/activity_contact_update.xml

@@ -30,7 +30,7 @@
         app:isShowDesc="false"
         app:max="100"
         app:progress="0"
-        app:progressDesc="进度:"
+        app:progressDesc="progress:"
         app:progressRadius="10dp" />
 
     <androidx.recyclerview.widget.RecyclerView

+ 2 - 2
home/src/main/res/layout/activity_sip_voip_audio.xml

@@ -24,7 +24,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -32,7 +32,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
     </LinearLayout>

+ 3 - 3
home/src/main/res/layout/activity_sip_voip_audio_ringing.xml

@@ -23,7 +23,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -31,7 +31,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
         <TextView
@@ -82,7 +82,7 @@
                 android:layout_centerInParent="true"
                 android:textSize="14dp"
                 android:textColor="#ffffff"
-                android:text="转接"/>
+                android:text=""/>
 
         </RelativeLayout>
         <ImageView

+ 5 - 5
home/src/main/res/layout/activity_sms_received.xml

@@ -15,7 +15,7 @@
                 android:id="@+id/tv_sms_title"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="短信来自:"
+                android:text="SMS from:"
                 android:textSize="16sp"
                 android:textColor="@color/main_color"/>
 
@@ -34,7 +34,7 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/tv_sms_reply"
                 android:layout_marginTop="10dp"
-                android:text="获取到本机号码为:"
+                android:text="@string/phone_number_title"
                 android:textColor="@color/main_color"
                 android:textSize="16sp" />
 
@@ -50,7 +50,7 @@
                 android:layout_height="wrap_content"
                 android:layout_below="@id/edit_sms_phone"
                 android:layout_marginTop="10dp"
-                android:text="请仔细检查本机号码是否正确,如不正确请手动修改,然后点击确定按钮更新号码; 如正确请直接点击下方确定按钮更新号码."
+                android:text="@string/phone_number_check_tips"
                 android:textColor="@color/color_red"
                 android:textSize="16sp" />
 
@@ -68,7 +68,7 @@
                     android:layout_weight="1"
                     android:padding="4dp"
                     android:gravity="center_horizontal"
-                    android:text="取消"
+                    android:text="@string/str_cancel"
                     android:textSize="18sp"
                     android:textColor="@color/javashop_color_coupon_a"/>
                 <TextView
@@ -78,7 +78,7 @@
                     android:layout_weight="1"
                     android:padding="4dp"
                     android:gravity="center_horizontal"
-                    android:text="确定"
+                    android:text="@string/str_confirm"
                     android:textSize="18sp"
                     android:textColor="@color/javashop_color_coupon_a"/>
             </LinearLayout>

+ 1 - 1
home/src/main/res/layout/activity_sos_emergency_call.xml

@@ -26,7 +26,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
         <TextView

+ 1 - 1
home/src/main/res/layout/activity_takeover.xml

@@ -11,7 +11,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             app:iconifiedByDefault="false"
-            app:queryHint="搜索" />
+            app:queryHint="@string/str_search" />
 
         <TextView
             android:id="@+id/tv_empty_takeover"

+ 1 - 1
home/src/main/res/layout/activity_voice_msg.xml

@@ -29,7 +29,7 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="20dp"
         android:gravity="center"
-        android:text="按住说话"
+        android:text="@string/str_voice_msg_btn_text"
         android:textColor="#B4B4B4"
         android:textSize="28dp"/>
 </LinearLayout>

+ 2 - 2
home/src/main/res/layout/activity_web_rtc_voip_audio.xml

@@ -25,7 +25,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -33,7 +33,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
     </LinearLayout>

+ 3 - 3
home/src/main/res/layout/activity_web_rtc_voip_audio_ringing.xml

@@ -24,7 +24,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -32,7 +32,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
         <TextView
@@ -83,7 +83,7 @@
                 android:layout_centerInParent="true"
                 android:textSize="14dp"
                 android:textColor="#ffffff"
-                android:text="转接"/>
+                android:text=""/>
 
         </RelativeLayout>
         <ImageView

+ 2 - 2
home/src/main/res/layout/adapter_client_list.xml

@@ -13,7 +13,7 @@
             android:layout_height="wrap_content"
             android:layout_centerVertical="true"
             android:layout_marginLeft="13px"
-            android:text="玫瑰房"
+            android:text=""
             android:textColor="#F78B8F"
             android:textSize="16px" />
 
@@ -24,7 +24,7 @@
             android:layout_centerVertical="true"
             android:layout_marginLeft="20px"
             android:layout_toRightOf="@+id/room_number_tv"
-            android:text="张女士"
+            android:text=""
             android:textColor="#F78B8F"
             android:textSize="16px" />
 

+ 11 - 11
home/src/main/res/layout/adapter_watch_contacts_item.xml

@@ -12,8 +12,7 @@
             android:id="@+id/item_relayout"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="@drawable/item_selector"
-            >
+            android:background="@drawable/item_selector">
 
             <TextView
                 android:id="@+id/room_number_tv"
@@ -21,7 +20,7 @@
                 android:layout_height="wrap_content"
                 android:layout_centerVertical="true"
                 android:layout_marginLeft="5dp"
-                android:text="--"
+                android:text="--"
                 android:textColor="@color/header"
                 android:textSize="12dp" />
 
@@ -32,7 +31,7 @@
                 android:layout_centerVertical="true"
                 android:layout_marginLeft="5dp"
                 android:layout_toRightOf="@+id/room_number_tv"
-                android:text="某某"
+                android:text="--"
                 android:textColor="#F78B8F"
                 android:textSize="16dp" />
 
@@ -40,21 +39,22 @@
                 android:id="@+id/awci_voice_recorder"
                 android:src="@drawable/voice_recorder"
                 android:layout_toLeftOf="@+id/awci_btn_call_out"
-                android:layout_marginEnd="15dp"
+                android:layout_marginEnd="10dp"
                 android:layout_centerVertical="true"
-                android:layout_width="35dp"
+                android:layout_width="32dp"
                 android:layout_height="22dp"/>
             <Button
                 android:id="@+id/awci_btn_call_out"
-                android:layout_marginRight="15dp"
+                android:layout_marginRight="10dp"
                 android:layout_toLeftOf="@+id/right_arrow"
-                android:textSize="13dp"
+                android:textSize="12sp"
                 android:layout_centerVertical="true"
                 android:textColor="@color/grgray"
-                android:layout_width="38dp"
+                android:layout_width="50dp"
                 android:layout_height="22dp"
                 android:background="@drawable/javashop_btn_balck_line_bg"
-                android:text="呼叫" />
+                android:text="@string/str_call"
+                android:singleLine="true"/>
 
             <ImageView
                 android:id="@+id/right_arrow"
@@ -62,7 +62,7 @@
                 android:layout_height="wrap_content"
                 android:layout_alignParentRight="true"
                 android:layout_centerVertical="true"
-                android:layout_marginRight="10dp"
+                android:layout_marginRight="6dp"
                 android:src="@drawable/zhe_die" />
 
         </RelativeLayout>

+ 3 - 3
home/src/main/res/layout/av_p2p_audio_incoming.xml

@@ -33,7 +33,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="转接"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -57,7 +57,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="挂断"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -80,7 +80,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="接听"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>

+ 3 - 3
home/src/main/res/layout/av_p2p_audio_outgoing.xml

@@ -39,7 +39,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="静音"
+                android:text="@string/str_call_mute"
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -61,7 +61,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="挂断"
+                android:text="@string/str_call_handoff"
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -85,7 +85,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="免提"
+                android:text="@string/str_call_speaker"
                 android:textColor="@android:color/white" />
 
         </LinearLayout>

+ 3 - 3
home/src/main/res/layout/av_p2p_video_connected_action.xml

@@ -36,7 +36,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="切到语音通话"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -58,7 +58,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="挂断"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>
@@ -81,7 +81,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="旋转摄像头"
+                android:text=""
                 android:textColor="@android:color/white" />
 
         </LinearLayout>

+ 3 - 3
home/src/main/res/layout/av_p2p_video_incoming_action.xml

@@ -28,7 +28,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
-            android:text="切换到语音接听"
+            android:text=""
             android:textColor="@android:color/white" />
 
     </LinearLayout>
@@ -54,7 +54,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
-            android:text="挂断"
+            android:text=""
             android:textColor="@android:color/white" />
 
     </LinearLayout>
@@ -80,7 +80,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="10dp"
-            android:text="接听"
+            android:text=""
             android:textColor="@android:color/white" />
 
     </LinearLayout>

+ 2 - 2
home/src/main/res/layout/av_p2p_video_outgoing_action.xml

@@ -22,7 +22,7 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="切换到语音"
+            android:text=""
             android:textColor="@android:color/white"
             android:textSize="10sp" />
 
@@ -45,7 +45,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="5dp"
-            android:text="取消"
+            android:text=""
             android:textColor="@android:color/white"
             android:textSize="12sp" />
 

+ 1 - 1
home/src/main/res/layout/back_layout.xml

@@ -13,5 +13,5 @@
         android:gravity="center_vertical"
         android:drawableLeft="@drawable/ic_arrow_back"
         android:drawablePadding="10dp"
-        android:text="返回" />
+        android:text="Back" />
 </LinearLayout>

+ 3 - 3
home/src/main/res/layout/event_list_item.xml

@@ -35,7 +35,7 @@
                         android:layout_marginStart="3dp"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:text="房号"
+                        android:text=""
                         android:textSize="14sp"/>
 
                 </LinearLayout>
@@ -45,14 +45,14 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="5dp"
-                    android:text="客户姓名"
+                    android:text=""
                     android:textSize="12sp"/>
                 <TextView
                     android:id="@+id/eli_event_time"
                     android:layout_marginTop="5dp"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="事件时间"
+                    android:text=""
                     android:textSize="12sp"/>
             </LinearLayout>
 

+ 1 - 1
home/src/main/res/layout/float_call_window_layout.xml

@@ -15,7 +15,7 @@
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="通话"
+        android:text="@string/call_window_title"
         android:textSize="24sp"
         android:textColor="@color/color_red" />
 

+ 1 - 1
home/src/main/res/layout/fragment_audio.xml

@@ -41,7 +41,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="5dp"
-            android:text="邀请你进行语音通话"
+            android:text=""
             android:textColor="@android:color/white" />
     </LinearLayout>
 

+ 1 - 1
home/src/main/res/layout/fragment_video.xml

@@ -64,7 +64,7 @@
                     android:id="@+id/descTextView"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="等待对方接通..."
+                    android:text=""
                     android:textColor="@android:color/white" />
             </LinearLayout>
         </LinearLayout>

+ 2 - 2
home/src/main/res/layout/im_dialog_lay.xml

@@ -10,7 +10,7 @@
         android:layout_height="wrap_content"
         android:paddingTop="20dp"
         android:gravity="center"
-        android:text="留言中..."
+        android:text="@string/str_voice_msg_started"
         android:textSize="24sp" />
 
     <Button
@@ -18,7 +18,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="20dp"
-        android:text="结束"
+        android:text="@string/str_voice_msg_end"
         android:textSize="20sp"/>
 
 </LinearLayout>

+ 1 - 1
home/src/main/res/layout/im_play_dialog_lay.xml

@@ -37,7 +37,7 @@
         android:id="@+id/btn_im_stop"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="停止"
+        android:text="@string/str_im_stop"
         android:textSize="18sp"/>
 
 </LinearLayout>

+ 89 - 0
home/src/main/res/layout/language_set_dialog.xml

@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:padding="10dp"
+    android:gravity="center">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+
+        <TextView
+            android:id="@+id/tv_language_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:text="@string/language_set_mode"
+            android:textSize="18sp" />
+
+        <RadioGroup
+            android:id="@+id/group_language_mode"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:orientation="horizontal">
+
+            <RadioButton
+                android:id="@+id/rb_language_yes"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/str_yes" />
+
+            <RadioButton
+                android:id="@+id/rb_language_no"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="4dp"
+                android:text="@string/str_no" />
+        </RadioGroup>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:orientation="vertical">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:text="@string/language_set_title"
+                android:textSize="18sp" />
+
+            <Spinner
+                android:id="@+id/spinner_language_select"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="10dp" />
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center_horizontal"
+            android:orientation="vertical">
+
+            <Button
+                android:id="@+id/confirm_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:padding="8dp"
+                android:text="@string/str_confirm"
+                android:textSize="16sp" />
+
+            <Button
+                android:id="@+id/cancel_button"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:padding="8dp"
+                android:text="@string/str_cancel"
+                android:textSize="16sp" />
+        </LinearLayout>
+
+    </LinearLayout>
+
+</ScrollView>

+ 4 - 4
home/src/main/res/layout/password_dialog_lay.xml

@@ -12,7 +12,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:gravity="center"
-        android:hint="请输密码"
+        android:hint="@string/input_password"
         android:textColor="@color/main_color"
         android:textSize="16sp" />
 
@@ -38,7 +38,7 @@
             android:layout_weight="1"
             android:gravity="center_horizontal"
             android:padding="4dp"
-            android:text="删除"
+            android:text="@string/str_delete"
             android:textColor="@color/main_color"
             android:textSize="16sp" />
 
@@ -49,7 +49,7 @@
             android:layout_weight="1"
             android:gravity="center_horizontal"
             android:padding="4dp"
-            android:text="取消"
+            android:text="@string/str_cancel"
             android:textColor="@color/main_color"
             android:textSize="16sp" />
 
@@ -60,7 +60,7 @@
             android:layout_weight="1"
             android:gravity="center_horizontal"
             android:padding="4dp"
-            android:text="确定"
+            android:text="@string/str_confirm"
             android:textColor="@color/main_color"
             android:textSize="16sp" />
     </LinearLayout>

+ 7 - 7
home/src/main/res/layout/phone_num_dialog_lay.xml

@@ -10,7 +10,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:gravity="center"
-        android:text="查询本机号码"
+        android:text="@string/check_my_phone_number"
         android:textColor="@color/main_color"/>
 
     <TextView
@@ -19,7 +19,7 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/tv_phone_title"
         android:layout_marginTop="10dp"
-        android:text="本机号码:"/>
+        android:text="@string/phone_number_title"/>
 
     <LinearLayout
         android:id="@+id/ll_operator"
@@ -31,7 +31,7 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="运营商号码:"/>
+            android:text="@string/operator_number"/>
 
         <EditText
             android:id="@+id/edit_operator_number"
@@ -51,7 +51,7 @@
         <TextView
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="短信指令:"/>
+            android:text="@string/check_sms_command"/>
 
         <EditText
             android:id="@+id/edit_sms_cmd"
@@ -74,7 +74,7 @@
             android:layout_weight="1"
             android:padding="4dp"
             android:gravity="center_horizontal"
-            android:text="取消"
+            android:text="@string/str_cancel"
             android:textSize="16sp"
             android:textColor="@color/main_color"/>
         <TextView
@@ -85,7 +85,7 @@
             android:padding="4dp"
             android:layout_marginLeft="10dp"
             android:gravity="center_horizontal"
-            android:text="发送"
+            android:text="@string/str_send"
             android:textSize="16sp"
             android:textColor="@color/main_color"/>
         <TextView
@@ -96,7 +96,7 @@
             android:padding="4dp"
             android:layout_marginLeft="10dp"
             android:gravity="center_horizontal"
-            android:text="拨打"
+            android:text="@string/str_call"
             android:textSize="16sp"
             android:textColor="@color/main_color"/>
     </LinearLayout>

+ 6 - 6
home/src/main/res/layout/server_config_dialog_lay.xml

@@ -18,7 +18,7 @@
             android:layout_height="wrap_content"
             android:gravity="center"
             android:textSize="16sp"
-            android:hint="请输入密码"
+            android:hint="@string/input_password"
             android:textColor="@color/main_color"/>
 
         <GridView
@@ -42,7 +42,7 @@
                 android:layout_weight="1"
                 android:padding="4dp"
                 android:gravity="center_horizontal"
-                android:text="删除"
+                android:text="@string/str_delete"
                 android:textSize="16sp"
                 android:textColor="@color/main_color"/>
 
@@ -53,7 +53,7 @@
                 android:layout_weight="1"
                 android:padding="4dp"
                 android:gravity="center_horizontal"
-                android:text="取消"
+                android:text="@string/str_cancel"
                 android:textSize="16sp"
                 android:textColor="@color/main_color"/>
             <TextView
@@ -63,7 +63,7 @@
                 android:layout_weight="1"
                 android:padding="4dp"
                 android:gravity="center_horizontal"
-                android:text="确定"
+                android:text="@string/str_confirm"
                 android:textSize="16sp"
                 android:textColor="@color/main_color"/>
         </LinearLayout>
@@ -171,7 +171,7 @@
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:text="取消"
+                android:text="@string/str_cancel"
                 android:textSize="16sp"
                 android:textColor="@color/black"/>
 
@@ -181,7 +181,7 @@
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
                 android:gravity="center"
-                android:text="保存"
+                android:text="@string/str_save"
                 android:textSize="16sp"
                 android:textColor="@color/black" />
         </LinearLayout>

+ 9 - 0
home/src/main/res/layout/spinner_item.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:singleLine="true"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center"
+    android:ellipsize="marquee"
+    android:textAlignment="inherit"
+    android:textSize="16sp"/>

+ 9 - 7
home/src/main/res/layout/takeover_item.xml

@@ -27,7 +27,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_marginLeft="10dp"
-                android:text="暂无"
+                android:text="@string/str_empty"
                 android:textSize="12sp" />
         </LinearLayout>
 
@@ -48,22 +48,24 @@
 
             <Button
                 android:id="@id/btn_user_change"
-                android:layout_width="38dp"
+                android:layout_width="54dp"
                 android:layout_height="22dp"
                 android:background="@drawable/javashop_btn_balck_line_bg"
-                android:text="替换"
+                android:text="@string/str_replace"
                 android:textColor="@color/grgray"
-                android:textSize="13dp" />
+                android:textSize="12sp"
+                android:singleLine="true"/>
 
             <Button
                 android:id="@+id/btn_call_out"
-                android:layout_width="38dp"
+                android:layout_width="54dp"
                 android:layout_height="22dp"
                 android:layout_marginLeft="5dp"
                 android:background="@drawable/javashop_btn_balck_line_bg"
-                android:text="呼叫"
+                android:text="@string/str_call"
                 android:textColor="@color/grgray"
-                android:textSize="13dp" />
+                android:textSize="12sp"
+                android:singleLine="true"/>
 
         </LinearLayout>
 

+ 124 - 32
home/src/main/res/layout/user_setting_layout.xml

@@ -9,7 +9,7 @@
 
         <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent"
+            android:layout_height="wrap_content"
             android:orientation="vertical">
 
             <LinearLayout
@@ -21,7 +21,8 @@
                 <ImageView
                     android:src="@mipmap/launcher"
                     android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"/>
+                    android:layout_height="wrap_content"
+                    android:visibility="gone"/>
             </LinearLayout>
 
             <LinearLayout
@@ -35,7 +36,7 @@
                     android:layout_height="wrap_content"
                     android:orientation="horizontal">
                     <TextView
-                        android:text="版本"
+                        android:text="@string/version_title"
                         android:textSize="14dp"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:layout_width="wrap_content"
@@ -58,7 +59,7 @@
                     android:layout_height="wrap_content"
                     android:orientation="horizontal">
                     <TextView
-                        android:text="设备ID"
+                        android:text="@string/device_id"
                         android:textSize="14dp"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:layout_width="wrap_content"
@@ -82,7 +83,7 @@
                     android:layout_height="wrap_content"
                     android:orientation="horizontal">
                     <TextView
-                        android:text="设备标识码"
+                        android:text="@string/device_identifier"
                         android:textSize="14dp"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:layout_width="wrap_content"
@@ -106,7 +107,7 @@
                     android:layout_height="wrap_content"
                     android:orientation="horizontal">
                     <TextView
-                        android:text="服务器"
+                        android:text="@string/server_title"
                         android:textSize="14dp"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:layout_width="wrap_content"
@@ -130,7 +131,7 @@
                     android:layout_height="wrap_content"
                     android:orientation="horizontal">
                     <TextView
-                        android:text="设备IP"
+                        android:text="@string/device_ip"
                         android:textSize="14dp"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:layout_width="wrap_content"
@@ -157,7 +158,7 @@
                     <TextView
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:text="TTS状态"
+                        android:text="@string/tts_state"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:textSize="14dp" />
 
@@ -179,7 +180,7 @@
                     <TextView
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:text="通话方式"
+                        android:text="@string/call_type"
                         android:textColor="@color/javashop_color_searcher_tv_gray"
                         android:textSize="14dp" />
 
@@ -201,79 +202,91 @@
                 android:padding="20dp"
                 android:orientation="vertical">
 
+                <View
+                    android:id="@+id/view_center_base"
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_centerInParent="true"/>
+
                 <Button
                     android:id="@+id/btn_user_change"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
+                    android:layout_toLeftOf="@id/view_center_base"
+                    android:layout_marginRight="10dp"
                     android:layout_gravity="center_horizontal"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="PC关联"
+                    android:text="@string/str_user_change"
                     android:textSize="14dp" />
 
                 <Button
                     android:id="@+id/btn_app_restart"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="20dp"
+                    android:layout_marginLeft="10dp"
                     android:layout_gravity="center_horizontal"
-                    android:layout_toRightOf="@id/btn_user_change"
+                    android:layout_toRightOf="@id/view_center_base"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="APP重启"
+                    android:text="@string/register_restart"
                     android:textSize="14dp" />
 
                 <Button
                     android:id="@+id/btn_check_update"
-                    android:layout_marginTop="10dp"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_toLeftOf="@id/view_center_base"
                     android:layout_gravity="center_horizontal"
                     android:layout_below="@id/btn_user_change"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="检查升级"
+                    android:text="@string/check_update"
                     android:textSize="14dp" />
 
                 <Button
                     android:id="@+id/btn_system_setting"
-                    android:layout_marginTop="10dp"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="20dp"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
                     android:layout_gravity="center_horizontal"
                     android:layout_below="@id/btn_user_change"
-                    android:layout_toRightOf="@id/btn_check_update"
+                    android:layout_toRightOf="@id/view_center_base"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="系统设置"
+                    android:text="@string/str_system_settings"
                     android:textSize="14dp" />
 
                 <Button
                     android:id="@+id/btn_update_contact"
-                    android:layout_marginTop="10dp"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="10dp"
+                    android:layout_toLeftOf="@id/view_center_base"
                     android:layout_gravity="center_horizontal"
                     android:layout_below="@id/btn_system_setting"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="更新通讯录"
+                    android:text="@string/contatc_update_title"
                     android:textSize="14dp" />
 
                 <Button
                     android:id="@+id/btn_phone_number"
-                    android:layout_marginTop="10dp"
-                    android:layout_width="wrap_content"
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginTop="10dp"
                     android:layout_gravity="center_horizontal"
-                    android:layout_marginLeft="20dp"
                     android:layout_below="@id/btn_system_setting"
-                    android:layout_toRightOf="@id/btn_update_contact"
+                    android:layout_toRightOf="@id/view_center_base"
                     android:background="@drawable/javashop_btn_balck_line_bg"
-                    android:text="本机号码"
+                    android:text="@string/phone_number_title"
                     android:textSize="14dp" />
 
                 <TextView
                     android:id="@+id/tv_call_title"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_below="@id/btn_check_update"
+                    android:layout_below="@id/btn_update_contact"
                     android:layout_marginTop="16dp"
                     android:text="使用普通电话:"
                     android:textSize="16sp"
@@ -302,6 +315,85 @@
                         android:text="否"/>
                 </RadioGroup>
 
+                <TextView
+                    android:id="@+id/tv_im_channel_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/tv_call_title"
+                    android:layout_marginTop="16dp"
+                    android:text="@string/media_button_message"
+                    android:textSize="16sp"
+                    android:visibility="gone"/>
+
+                <RadioGroup
+                    android:id="@+id/group_im_channel"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/tv_im_channel_title"
+                    android:layout_marginTop="10dp"
+                    android:orientation="horizontal"
+                    android:visibility="gone">
+                    <RadioButton
+                        android:id="@+id/rb_im_channel_yes"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="@string/str_yes"/>
+                    <RadioButton
+                        android:id="@+id/rb_im_channel_no"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="4dp"
+                        android:text="@string/str_no"/>
+                </RadioGroup>
+
+                <TextView
+                    android:id="@+id/tv_language_title"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/group_im_channel"
+                    android:layout_marginTop="10dp"
+                    android:text="@string/language_set_mode"
+                    android:textSize="16sp" />
+
+                <RadioGroup
+                    android:id="@+id/group_language_mode"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/tv_language_title"
+                    android:layout_marginTop="10dp"
+                    android:orientation="horizontal">
+                    <RadioButton
+                        android:id="@+id/rb_language_yes"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="@string/str_yes"/>
+                    <RadioButton
+                        android:id="@+id/rb_language_no"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="4dp"
+                        android:text="@string/str_no"/>
+                </RadioGroup>
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:layout_below="@id/group_language_mode"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="@string/language_set_title"
+                        android:textSize="16sp" />
+
+                    <Spinner
+                        android:id="@+id/spinner_language_select"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content" />
+                </LinearLayout>
+
             </RelativeLayout>
 
         </LinearLayout>

+ 2 - 2
home/src/main/res/layout/watch_activity_dialing_voice.xml

@@ -24,7 +24,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -32,7 +32,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
     </LinearLayout>

+ 7 - 7
home/src/main/res/layout/watch_activity_event.xml

@@ -45,7 +45,7 @@
                     android:id="@+id/sickbed_tv"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="05房01床"
+                    android:text="--"
                     android:textSize="14px" />
 
                 <TextView
@@ -53,7 +53,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_alignParentRight="true"
-                    android:text="12:00:00"
+                    android:text="--:--"
                     android:textSize="12px" />
 
             </RelativeLayout>
@@ -71,7 +71,7 @@
                     android:id="@+id/name_tv"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="zhangx"
+                    android:text=""
                     android:textSize="14px" />
 
                 <LinearLayout
@@ -97,7 +97,7 @@
                         android:layout_height="20px"
                         android:background="@drawable/sp_event_undo"
                         android:gravity="center"
-                        android:text="啊哈哈"
+                        android:text=""
                         android:textSize="12px" />
 
                     <ImageView
@@ -124,7 +124,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginRight="10px"
-                    android:text="处理人"
+                    android:text=""
                     android:textSize="12px"
                     android:visibility="gone" />
 
@@ -132,7 +132,7 @@
                     android:id="@+id/processing_time_tv"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:text="12:00:00"
+                    android:text="--:--"
                     android:textSize="12px" />
             </LinearLayout>
         </RelativeLayout>
@@ -150,7 +150,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_centerInParent="true"
-                android:text="未处理"
+                android:text=""
                 android:textSize="8sp" />
 
 

+ 3 - 3
home/src/main/res/layout/watch_activity_event_detail.xml

@@ -19,7 +19,7 @@
                     android:layout_width="30dp"
                     android:layout_height="30dp"
                     android:layout_gravity="left|center_vertical"
-                    android:layout_marginLeft="3.0dip"
+                    android:layout_marginLeft="4dp"
                     android:src="@drawable/btn_back" />
             </LinearLayout>
             <LinearLayout
@@ -107,7 +107,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="left|center_vertical"
-                    android:layout_marginLeft="3.0dip"
+                    android:layout_marginLeft="4dp"
                     android:background="@drawable/yu_yin_jie_ting" />
                 <LinearLayout
                     android:layout_width="match_parent"
@@ -121,7 +121,7 @@
                         android:layout_width="120dp"
                         android:layout_height="55dp"
                         android:layout_gravity="right|center_vertical"
-                        android:layout_marginRight="3.0dip"
+                        android:layout_marginRight="4dp"
                         android:src="@drawable/icon_switch_off" />
                 </LinearLayout>
             </LinearLayout>

+ 11 - 10
home/src/main/res/layout/watch_activity_home2.xml

@@ -40,7 +40,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="10dp"
-                        android:text="顾客列表"
+                        android:text="@string/custom_title"
                         android:textColor="#ffffff"
                         android:textSize="16dp" />
 
@@ -64,7 +64,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="10dp"
-                        android:text="通话记录"
+                        android:text="@string/call_list"
                         android:textColor="#ffffff"
                         android:textSize="16dp" />
 
@@ -114,7 +114,7 @@
                             android:layout_height="wrap_content"
                             android:textColor="#ffffff"
                             android:textSize="16sp"
-                            android:text="群留言"/>
+                            android:text="@string/group_message"/>
 
                         <TextView
                             android:id="@+id/tv_im_count"
@@ -161,7 +161,8 @@
                             android:layout_height="wrap_content"
                             android:layout_marginTop="2dp"
                             android:textColor="#ffffff"
-                            android:textSize="16sp" />
+                            android:textSize="16sp"
+                            android:visibility="gone"/>
 
                         <TextView
                             android:id="@+id/watch_user_phone_tv"
@@ -226,9 +227,9 @@
                             <TextView
                                 android:layout_width="wrap_content"
                                 android:layout_height="wrap_content"
-                                android:text="同事"
+                                android:text="@string/colleague"
                                 android:textColor="#ffffff"
-                                android:textSize="14dp" />
+                                android:textSize="12sp" />
 
                         </LinearLayout>
 
@@ -259,9 +260,9 @@
                                 android:id="@+id/electric_quantity_tv"
                                 android:layout_width="wrap_content"
                                 android:layout_height="wrap_content"
-                                android:text="100%"
+                                android:text="-"
                                 android:textColor="#ffffff"
-                                android:textSize="16dp" />
+                                android:textSize="16sp" />
 
                             <TextView
                                 android:id="@+id/battery_warning_tv"
@@ -269,7 +270,7 @@
                                 android:layout_height="wrap_content"
                                 android:text=""
                                 android:textColor="#ffffff"
-                                android:textSize="16dp"
+                                android:textSize="16sp"
                                 android:visibility="gone" />
                         </LinearLayout>
 
@@ -299,7 +300,7 @@
                             <TextView
                                 android:id="@+id/tv_net_reconnect_text"
                                 android:visibility="gone"
-                                android:text="重连中"
+                                android:text="@string/reconnect"
                                 android:layout_width="wrap_content"
                                 android:layout_height="wrap_content"
                                 android:textColor="@color/warn_orange"

+ 18 - 14
home/src/main/res/layout/watch_activity_register.xml

@@ -17,19 +17,10 @@
             android:orientation="vertical">
 
             <TextView
-                android:id="@+id/tv_register_nonet"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:gravity="center_vertical"
-                android:text="没有网络"
-                android:textColor="@color/warn_orange"
-                android:visibility="gone" />
-
-            <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="服务器IP: "
+                android:text="@string/register_server_ip"
                 android:textColor="@color/grgray"
                 android:textSize="15sp" />
 
@@ -46,7 +37,7 @@
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="10dp"
-                android:text="识别码: "
+                android:text="@string/register_device_identifier"
                 android:textColor="@color/grgray"
                 android:textSize="15sp" />
 
@@ -76,7 +67,7 @@
                 android:layout_marginBottom="20dp"
                 android:background="#ffffff"
                 android:gravity="center"
-                android:text="注册完成"
+                android:text="@string/register_done"
                 android:textSize="18sp" />
 
             <TextView
@@ -89,7 +80,7 @@
                 android:layout_marginBottom="20dp"
                 android:background="#ffffff"
                 android:gravity="center"
-                android:text="重启app"
+                android:text="@string/register_restart"
                 android:textSize="18sp" />
 
             <TextView
@@ -102,7 +93,20 @@
                 android:layout_marginBottom="20dp"
                 android:background="#ffffff"
                 android:gravity="center"
-                android:text="配置服务器"
+                android:text="@string/register_config_server"
+                android:textSize="18sp" />
+
+            <TextView
+                android:id="@+id/tv_language_settings"
+                android:layout_width="match_parent"
+                android:layout_height="40dp"
+                android:layout_marginLeft="30dp"
+                android:layout_marginTop="20dp"
+                android:layout_marginRight="30dp"
+                android:layout_marginBottom="20dp"
+                android:background="#ffffff"
+                android:gravity="center"
+                android:text="@string/str_language_settings"
                 android:textSize="18sp" />
         </LinearLayout>
     </ScrollView>

+ 3 - 3
home/src/main/res/layout/watch_activity_voice_calls.xml

@@ -23,7 +23,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="房号"
+            android:text=""
             android:textSize="18sp" />
         <TextView
             android:id="@+id/bao_mother_name_tv"
@@ -31,7 +31,7 @@
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal"
             android:layout_marginTop="8px"
-            android:text="宝妈名字"
+            android:text=""
             android:textSize="20sp" />
 
         <TextView
@@ -82,7 +82,7 @@
           android:layout_centerInParent="true"
           android:textSize="14px"
           android:textColor="#ffffff"
-          android:text="转接"/>
+          android:text=""/>
 
       </RelativeLayout>
         <ImageView

+ 5 - 5
keepalive/src/main/java/com/wdkl/ncs/keepbackground/utils/ForegroundNotificationUtils.java

@@ -20,7 +20,7 @@ public class ForegroundNotificationUtils {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
             //启动前台服务而不显示通知的漏洞已在 API Level 25 修复
             NotificationManager manager = (NotificationManager)service.getSystemService(Context.NOTIFICATION_SERVICE);
-            NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"主服务",NotificationManager.IMPORTANCE_HIGH);
+            NotificationChannel channel = new NotificationChannel(CHANNEL_ID,"Service",NotificationManager.IMPORTANCE_HIGH);
             channel.enableLights(true);//设置提示灯
             channel.setLightColor(Color.GREEN);//设置提示灯颜色
             channel.setShowBadge(true);//显示logo
@@ -31,8 +31,8 @@ public class ForegroundNotificationUtils {
             manager.createNotificationChannel(channel);
 
             Notification notification = new Notification.Builder(service,CHANNEL_ID)
-                    .setContentTitle("主服务")//标题
-                    .setContentText("运行中...")//内容
+                    .setContentTitle("Service")//标题
+                    .setContentText("running...")//内容
                     .setWhen(System.currentTimeMillis())
                     .setSmallIcon(R.drawable.icon1)//小图标一定需要设置,否则会报错(如果不设置它启动服务前台化不会报错,但是你会发现这个通知不会启动),如果是普通通知,不设置必然报错
                     .setLargeIcon(BitmapFactory.decodeResource(service.getResources(),R.drawable.icon1))
@@ -42,8 +42,8 @@ public class ForegroundNotificationUtils {
             //利用漏洞在 API Level 18 及以上的 Android 系统中,启动前台服务而不显示通知
 //            service.startForeground(Foreground_ID, new Notification());
             Notification notification = new Notification.Builder(service)
-                    .setContentTitle("主服务")//设置标题
-                    .setContentText("运行中...")//设置内容
+                    .setContentTitle("Service")//设置标题
+                    .setContentText("running...")//设置内容
                     .setWhen(System.currentTimeMillis())//设置创建时间
                     .setSmallIcon(R.drawable.icon1)//设置状态栏图标
                     .setLargeIcon(BitmapFactory.decodeResource(service.getResources(),R.drawable.icon1))//设置通知栏图标

+ 10 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/model/ServerIpInfo.java

@@ -64,6 +64,8 @@ public class ServerIpInfo implements Serializable {
 
     private Long serverTime;
 
+    private String lang;
+
     public String getTcpLocalIp() {
         return tcpLocalIp;
     }
@@ -175,4 +177,12 @@ public class ServerIpInfo implements Serializable {
     public void setServerTime(Long serverTime) {
         this.serverTime = serverTime;
     }
+
+    public String getLang() {
+        return lang;
+    }
+
+    public void setLang(String lang) {
+        this.lang = lang;
+    }
 }

+ 9 - 9
middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/ContactHelper.java

@@ -15,6 +15,7 @@ import android.text.TextUtils;
 import android.util.Log;
 
 import com.wdkl.ncs.android.lib.base.BaseApplication;
+import com.wdkl.ncs.android.middleware.R;
 import com.wdkl.ncs.android.middleware.common.Constants;
 import com.wdkl.ncs.android.middleware.model.ContactItem;
 import com.wdkl.ncs.android.middleware.model.vo.PhoneInteractionVO;
@@ -156,7 +157,7 @@ public class ContactHelper {
     public static void insertContact(Context context, String name, String phoneNumber, Callback callback) {
         Log.d(TAG, "add contact: " + name + ", phone: " + phoneNumber);
         if (callback != null) {
-            String text = "添加联系人: " + name + ", " + phoneNumber;
+            String text = context.getString(R.string.contact_add) + name + ", " + phoneNumber;
             callback.onBack(text);
         }
 
@@ -336,7 +337,7 @@ public class ContactHelper {
                         Log.d(TAG, "get phoneNumber=" + strPhoneNumber);
                         if (strPhoneNumber.equals(phone)) {
                             if (callback != null) {
-                                String text = "找到相同号码联系人: " + name + ", " + strPhoneNumber;
+                                String text = context.getString(R.string.contact_duplication) + name + ", " + strPhoneNumber;
                                 callback.onBack(text);
                             }
                             delete = true;
@@ -586,7 +587,7 @@ public class ContactHelper {
                     //如果这个号码为空则不操作
                     if (TextUtils.isEmpty(contactVO.getPhoneNumber())) {
                         if (callback != null) {
-                            String text = contactVO.getName() + ": 号码为空,不更新";
+                            String text = contactVO.getName() + context.getString(R.string.contact_number_empty);
                             callback.onBack(text);
 
                             float p = (float) index / (float) size;
@@ -621,7 +622,7 @@ public class ContactHelper {
                                         //Log.e(TAG, "phone num compare: num1=" + strPhoneNumber + ", num2=" + phoneNum);
                                         if (strPhoneNumber.equals(phoneNum)) {
                                             if (callback != null) {
-                                                String text = "找到相同号码联系人: " + name + ", " + strPhoneNumber;
+                                                String text = context.getString(R.string.contact_duplication) + name + ", " + strPhoneNumber;
                                                 callback.onBack(text);
                                             }
                                             delete = true;
@@ -653,8 +654,7 @@ public class ContactHelper {
                 cursor.close();
 
                 if (callback != null) {
-                    String text = "更新完成!";
-                    callback.onBack(text);
+                    callback.onBack(context.getString(R.string.contact_update_complete));
                 }
             }
         }
@@ -727,7 +727,7 @@ public class ContactHelper {
         synchronized (lock) {
             batchDelContact(context);
             if (callback != null) {
-                String text = "删除本地联系人完成...\n";
+                String text = context.getString(R.string.contact_delete_complete) + "\n";
                 callback.onBack(text);
             }
 
@@ -801,7 +801,7 @@ public class ContactHelper {
                     .build());
 
             if (callback != null) {
-                String text = "添加联系人: " + name + ", " + number;
+                String text = context.getString(R.string.contact_add) + name + ", " + number;
                 callback.onBack(text);
 
                 float p = (float) (i+1) / (float) contactVOS.size();
@@ -813,7 +813,7 @@ public class ContactHelper {
         try {
             context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
             if (callback != null) {
-                String text = "\n更新完成...";
+                String text = "\n" + context.getString(R.string.contact_update_complete);
                 callback.onBack(text);
             }
         } catch (Exception e) {

+ 10 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/utils/StringUtil.java

@@ -0,0 +1,10 @@
+package com.wdkl.ncs.android.middleware.utils;
+
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+public class StringUtil {
+
+    public static String getResString(int resId) {
+        return BaseApplication.appContext.getString(resId);
+    }
+}

BIN
resource/src/main/res/raw/im_start.wav


BIN
resource/src/main/res/raw/low_battery.wav


+ 47 - 0
resource/src/main/res/values-es/arrays.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+    <string-array name="language_list">
+        <item value="0">Automático</item>
+        <item value="1">Inglés</item>
+        <item value="2">Chino</item>
+        <item value="3">Español</item>
+        <item value="4">Ruso</item>
+    </string-array>
+
+    <string-array name="time_zones">
+        <item>GMT-11:00</item>
+        <item>GMT-10:00</item>
+        <item>GMT-09:00</item>
+        <item>GMT-08:00</item>
+        <item>GMT-07:00</item>
+        <item>GMT-06:00</item>
+        <item>GMT-05:00</item>
+        <item>GMT-04:00</item>
+        <item>GMT-03:30</item>
+        <item>GMT-02:00</item>
+        <item>GMT-01:00</item>
+        <item>GMT+00:00</item>
+        <item>GMT+01:00</item>
+        <item>GMT+02:00</item>
+        <item>GMT+03:00</item>
+        <item>GMT+03:30</item>
+        <item>GMT+04:00</item>
+        <item>GMT+04:30</item>
+        <item>GMT+05:00</item>
+        <item>GMT+05:30</item>
+        <item>GMT+05:45</item>
+        <item>GMT+06:00</item>
+        <item>GMT+06:30</item>
+        <item>GMT+07:00</item>
+        <item>GMT+08:00</item>
+        <item>GMT+09:00</item>
+        <item>GMT+09:30</item>
+        <item>GMT+10:00</item>
+        <item>GMT+10:30</item>
+        <item>GMT+11:00</item>
+        <item>GMT+12:00</item>
+        <item>GMT+13:00</item>
+        <item>GMT+14:00</item>
+    </string-array>
+
+</resources>

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

@@ -0,0 +1,231 @@
+<resources>
+    <string name="javashop_app_name">Mobile app</string>
+    <string name="javashop_qrcode_name">扫啊扫</string>
+    <string name="javashop_navigation_home_title">首页</string>
+    <string name="javashop_navigation_category_title">分类</string>
+    <string name="javashop_navigation_cart_title">购物车</string>
+    <string name="javashop_navigation_persion_title">我的</string>
+    <string name="javashop_cart_shop_item_title">优惠券</string>
+    <string name="javashop_group_promotion_fulldiscount">满折</string>
+    <string name="javashop_group_promotion_fullminus">满减</string>
+    <string name="javashop_group_promotion_point">积分</string>
+    <string name="javashop_group_promotion_freeship">免邮</string>
+    <string name="javashop_group_promotion_gift">赠品</string>
+    <string name="javashop_group_promotion_bonus">赠券</string>
+    <string name="javashop_group_not_full_tobuy">再逛逛</string>
+    <string name="javashop_promotion_string">促销</string>
+    <string name="javashop_singgle_promotion_edit_string">修改</string>
+    <string name="javashop_member_action_order_wait_pay">待付款</string>
+    <string name="javashop_member_action_order_wait_rog">待收货</string>
+    <string name="javashop_member_action_order_wait_comment">待评论</string>
+    <string name="javashop_member_action_aftersale">退换/售后</string>
+    <string name="javashop_member_action_order_all">我的订单</string>
+    <string name="javashop_member_action_point">积分</string>
+    <string name="javashop_member_action_bouns">优惠券</string>
+    <string name="javashop_member_action_goods">收藏商品</string>
+    <string name="javashop_member_action_shop">收藏店铺</string>
+    <string name="javashop_member_action_security">账户安全</string>
+    <string name="javashop_member_action_history">我的足迹</string>
+    <string name="javashop_member_action_address">我的地址</string>
+    <string name="javashop_member_action_user_service">客户服务</string>
+    <string name="javashop_setting_action_receipt">我的发票</string>
+    <string name="javashop_setting_action_privacy">隐私设置</string>
+    <string name="javashop_setting_action_share">应用分享</string>
+    <string name="javashop_setting_action_about">关于</string>
+    <string name="javashop_setting_action_logout">退出登录</string>
+    <string name="javashop_setting_action_cache">清除缓存</string>
+    <string name="javashop_goods_filter_all">全部</string>
+    <string name="javashop_all_brand">全部品牌</string>
+    <string name="javashop_confrim">确定</string>
+    <string name="javashop_cancel">取消</string>
+    <string name="javashop_add_cart">加入购物车</string>
+    <string name="javashop_shop">店铺</string>
+    <string name="javashop_self">自营</string>
+    <string name="javashop_collect">关注</string>
+    <string name="javashop_cart">购物车</string>
+    <string name="javashop_login">登录</string>
+    <string name="javashop_send_message">发送验证码</string>
+    <string name="javashop_use">立即使用</string>
+    <string name="javashop_get">立即领取</string>
+
+    <string name="wdkl_app_name">Aplicación móvil</string>
+    <string name="data_empty">Vacío</string>
+    <string name="register_server_ip">IP del servidor:</string>
+    <string name="register_device_identifier">Identificador:</string>
+    <string name="register_done">Registrar Aceptar</string>
+    <string name="register_restart">Reiniciar aplicación</string>
+    <string name="register_config_server">Servidor de configuración</string>
+    <string name="custom_title">Clientes</string>
+    <string name="call_list">llamadas</string>
+    <string name="colleague">Colegas</string>
+    <string name="group_message">Mensaje de grupo</string>
+    <string name="reconnect">Reconectar</string>
+
+    <string name="str_empty">Nulo</string>
+    <string name="str_null">Nulo</string>
+    <string name="device_disable">Dispositivo deshabilitado</string>
+    <string name="str_disable">Activar dispositivo</string>
+    <string name="str_enable">Habilitado</string>
+    <string name="setting_params_error">Error de configuración de parámetros:</string>
+    <string name="support_sent">Refuerzos enviados</string>
+    <string name="net_error">Error de red</string>
+    <string name="call_init_error">Error de red o sip, espere</string>
+    <string name="call_fail">Llamada fallida</string>
+    <string name="tips_reboot">Reinicie el dispositivo</string>
+    <string name="str_replace">Reemplazar</string>
+    <string name="call_window_title">Llamar</string>
+
+    <string name="no_response">Sin respuesta</string>
+    <string name="call_success">Llamada exitosa</string>
+    <string name="call_in_calling">Llamando…</string>
+    <string name="call_connecting">Conectando…</string>
+    <string name="call_in_call">Conectado…</string>
+    <string name="call_disconnect">Desconectar</string>
+    <string name="call_error">Error de conexión</string>
+    <string name="call_reject">Rechazar</string>
+    <string name="call_busy">Ocupado</string>
+    <string name="call_incoming">Nueva llamada…</string>
+    <string name="call_failed">Error de llamada</string>
+    <string name="call_end">Fin de llamada</string>
+    <string name="str_call_mute">Silencio</string>
+    <string name="str_call_handoff">Transferencia</string>
+    <string name="str_call_accept">Respuesta</string>
+    <string name="str_call_speaker">Altavoz</string>
+    <string name="voice_call_speech">%s llamando</string>
+
+    <string name="countdown_time">%ds</string>
+    <string name="input_password">Introducir contrase?a</string>
+    <string name="invalid_password">Error de contrase?a</string>
+    <string name="input_empty">Error de parámetros</string>
+    <string name="str_confirm">Confirmar</string>
+    <string name="str_cancel">Cancelar</string>
+    <string name="str_delete">Eliminar</string>
+    <string name="str_save">Guardar</string>
+    <string name="str_loading">Cargando</string>
+    <string name="str_yes">Sí</string>
+    <string name="str_no">No</string>
+
+    <string name="download_error">Error de descarga!</string>
+    <string name="download_cancel">Cancelar descarga</string>
+    <string name="update_success">Actualización exitosa</string>
+    <string name="update_fail">Actualización fallida</string>
+    <string name="downloading">Descargar…</string>
+    <string name="updating">Actualizando, espere</string>
+    <string name="update_no_required">Actualmente es la última versión</string>
+    <string name="detect_new_version">Nueva versión detectada, ?actualizar ahora?</string>
+    <string name="new_version_tips">Nueva versión detectada</string>
+
+    <string name="str_home">Inicio</string>
+    <string name="str_fees">Tarifas</string>
+    <string name="str_more">Más</string>
+    <string name="str_support">Reforzar</string>
+    <string name="str_call">Llamar</string>
+
+    <string name="doctor_title">Doctor</string>
+    <string name="nurse_title">Enfermera</string>
+    <string name="reboot_device">Reiniciar</string>
+    <string name="check_update">Comprobar actualización</string>
+    <string name="server_config">Configuración del servidor</string>
+    <string name="product_desc">Producto:</string>
+    <string name="device_error">Error del dispositivo, reinicie!</string>
+
+    <string name="str_voice_msg_start">Iniciar registro</string>
+    <string name="str_voice_msg_started">Grabación de voz</string>
+    <string name="str_voice_msg_end">Fin</string>
+    <string name="str_voice_msg_btn_title">Liberar para enviar mensaje</string>
+    <string name="str_voice_msg_btn_text">Presione para grabar el mensaje</string>
+    <string name="str_voice_msg_record_loss">el tiempo es demasiado corto</string>
+    <string name="str_voice_msg_record_cancel">Mensaje de voz cancelado</string>
+    <string name="str_voice_msg_send_success">envío exitoso</string>
+    <string name="str_voice_msg_send_fail">envío fallido</string>
+    <string name="str_voice_msg_play">reproducir mensaje de voz</string>
+    <string name="str_im_no_channel">Por favor ingrese el canal del mensaje</string>
+    <string name="str_im_no_media_button">botón multimedia para mensaje de voz deshabilitado</string>
+    <string name="str_im_media_button_unuseful">Presione el botón de grabación</string>
+    <string name="str_im_stop">Parar</string>
+
+    <string name="str_select_responsible_title">Seleccionar responsable</string>
+    <string name="str_select_resposible_err">Error responsable</string>
+    <string name="str_no_resposible">Sin responsabilidad</string>
+    <string name="str_set_resposible_success">Establecer éxito responsable</string>
+    <string name="str_set_resposible_fail">Error al establecer responsable</string>
+    <string name="str_event_handle_warning">el evento necesita ser manejado</string>
+    <string name="str_event_response">Respondido: %s %s</string>
+    <string name="str_event_cancel">Evento cancelado</string>
+    <string name="str_event_done">Evento realizado</string>
+    <string name="str_search">Buscar</string>
+
+    <string name="call_phone_failed">Llamada fallida, verifique el número de teléfono</string>
+    <string name="phone_type">Móvil-%d; Extender-%d; Anfitrión-%d</string>
+    <string name="user_change_success">Cambio exitoso, por favor espere.</string>
+    <string name="user_change_failed">Cambio fallido, vuelva a intentarlo.</string>
+    <string name="retry_tips">Vuelve a intentarlo más tarde</string>
+    <string name="tts_init_success">éxito</string>
+    <string name="tts_init_failed">error</string>
+
+    <string name="event_voice_msg">Mensaje de voz</string>
+    <string name="event_voice_call">Llamar</string>
+    <string name="event_undo">Deshacer</string>
+    <string name="event_responded">Respondido</string>
+    <string name="device_change_check">Confirmar cambio?</string>
+    <string name="device_change_tips">Cambiando, espera</string>
+    <string name="invalid_phone_number">Teléfono no válido: %s</string>
+
+    <string name="version_title">Versión:</string>
+    <string name="device_id">ID:</string>
+    <string name="device_identifier">Identificador:</string>
+    <string name="server_title">Servidor:</string>
+    <string name="device_ip">IP:</string>
+    <string name="tts_state">TTS:</string>
+    <string name="call_type">Tipo de llamada:</string>
+    <string name="str_user_change">Cambio de usuario</string>
+    <string name="str_check_update">Comprobar actualización</string>
+    <string name="str_system_settings">Configuración del sistema</string>
+    <string name="media_button_message">Habilitar mensaje de botón multimedia:</string>
+
+    <string name="permission_tips">Otorgue permisos</string>
+    <string name="device_not_register">Dispositivo no registrado, comuníquese con su administrador</string>
+    <string name="device_not_register_tips">Dispositivo no registrado, comuníquese con su administrador, luego haga clic en el botón Registrar Aceptar</string>
+    <string name="init_data_error">Error de datos de inicio, comuníquese con su administrador</string>
+    <string name="init_server_data_error">Error de datos del servidor de inicio</string>
+    <string name="str_reload">Recargar</string>
+    <string name="device_user_empty">Configure el usuario del dispositivo</string>
+    <string name="tcp_connect_success">Conectado</string>
+    <string name="tcp_connect_failed">Desconectado</string>
+    <string name="net_disconnect">Desconectado, verifique la red</string>
+    <string name="device_user_not_register">Usuario no registrado</string>
+    <string name="click_twice_start_settings">Hacer clic dos veces para abrir la configuración</string>
+    <string name="click_twice_to_back">Click again to back</string>
+    <string name="low_power">Poca potencia</string>
+
+    <string name="language_set_title">Conjunto de idiomas:</string>
+    <string name="language_set_mode">Sincronizar idioma del servidor:</string>
+    <string name="str_language_settings">Conjunto de idiomas</string>
+
+    <string name="contact_start_load">Start load contact</string>
+    <string name="contact_start_update">Start update, wait a moment.</string>
+    <string name="device_not_registered">Device not registered</string>
+    <string name="contact_load_count">Load contact count: %d</string>
+    <string name="contact_list_item">Contact name: %s, number: %s</string>
+    <string name="contact_updating">Updating</string>
+    <string name="contact_update_complete">Update complete:</string>
+    <string name="contact_update_porgress">Update progress:</string>
+    <string name="contact_add">Add contact:</string>
+    <string name="contact_duplication">Duplicate contact:</string>
+    <string name="contact_number_empty">Empty contact number</string>
+    <string name="contact_delete_complete">Delete contact complete.</string>
+
+    <string name="device_number_update_success">Update success!</string>
+    <string name="device_number_update_failed">Update failed!</string>
+    <string name="device_number_update_empty">Empty number!</string>
+    <string name="grant_write_permission">Please grant write external file permission!</string>
+    <string name="contatc_update_title">Update contact</string>
+    <string name="phone_number_title">My phone number</string>
+    <string name="wait_moment">Please wait</string>
+    <string name="send_sms_number_empty">Send phone number empty</string>
+    <string name="phone_number_check_tips">Please double-check the phone number is correct</string>
+    <string name="check_my_phone_number">Check my phone number</string>
+    <string name="operator_number">Operator number:</string>
+    <string name="check_sms_command">SMS cmd:</string>
+    <string name="str_send">Send</string>
+</resources>

+ 47 - 0
resource/src/main/res/values-ru/arrays.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+
+    <string-array name="language_list">
+        <item value="0">Авто</item>
+        <item value="1">Английский</item>
+        <item value="2">Китайский</item>
+        <item value="3">Испанский</item>
+        <item value="4">Русский</item>
+    </string-array>
+
+    <string-array name="time_zones">
+        <item>GMT-11:00</item>
+        <item>GMT-10:00</item>
+        <item>GMT-09:00</item>
+        <item>GMT-08:00</item>
+        <item>GMT-07:00</item>
+        <item>GMT-06:00</item>
+        <item>GMT-05:00</item>
+        <item>GMT-04:00</item>
+        <item>GMT-03:30</item>
+        <item>GMT-02:00</item>
+        <item>GMT-01:00</item>
+        <item>GMT+00:00</item>
+        <item>GMT+01:00</item>
+        <item>GMT+02:00</item>
+        <item>GMT+03:00</item>
+        <item>GMT+03:30</item>
+        <item>GMT+04:00</item>
+        <item>GMT+04:30</item>
+        <item>GMT+05:00</item>
+        <item>GMT+05:30</item>
+        <item>GMT+05:45</item>
+        <item>GMT+06:00</item>
+        <item>GMT+06:30</item>
+        <item>GMT+07:00</item>
+        <item>GMT+08:00</item>
+        <item>GMT+09:00</item>
+        <item>GMT+09:30</item>
+        <item>GMT+10:00</item>
+        <item>GMT+10:30</item>
+        <item>GMT+11:00</item>
+        <item>GMT+12:00</item>
+        <item>GMT+13:00</item>
+        <item>GMT+14:00</item>
+    </string-array>
+</resources>

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

@@ -0,0 +1,231 @@
+<resources>
+    <string name="javashop_app_name">Mobile app</string>
+    <string name="javashop_qrcode_name">扫啊扫</string>
+    <string name="javashop_navigation_home_title">首页</string>
+    <string name="javashop_navigation_category_title">分类</string>
+    <string name="javashop_navigation_cart_title">购物车</string>
+    <string name="javashop_navigation_persion_title">我的</string>
+    <string name="javashop_cart_shop_item_title">优惠券</string>
+    <string name="javashop_group_promotion_fulldiscount">满折</string>
+    <string name="javashop_group_promotion_fullminus">满减</string>
+    <string name="javashop_group_promotion_point">积分</string>
+    <string name="javashop_group_promotion_freeship">免邮</string>
+    <string name="javashop_group_promotion_gift">赠品</string>
+    <string name="javashop_group_promotion_bonus">赠券</string>
+    <string name="javashop_group_not_full_tobuy">再逛逛</string>
+    <string name="javashop_promotion_string">促销</string>
+    <string name="javashop_singgle_promotion_edit_string">修改</string>
+    <string name="javashop_member_action_order_wait_pay">待付款</string>
+    <string name="javashop_member_action_order_wait_rog">待收货</string>
+    <string name="javashop_member_action_order_wait_comment">待评论</string>
+    <string name="javashop_member_action_aftersale">退换/售后</string>
+    <string name="javashop_member_action_order_all">我的订单</string>
+    <string name="javashop_member_action_point">积分</string>
+    <string name="javashop_member_action_bouns">优惠券</string>
+    <string name="javashop_member_action_goods">收藏商品</string>
+    <string name="javashop_member_action_shop">收藏店铺</string>
+    <string name="javashop_member_action_security">账户安全</string>
+    <string name="javashop_member_action_history">我的足迹</string>
+    <string name="javashop_member_action_address">我的地址</string>
+    <string name="javashop_member_action_user_service">客户服务</string>
+    <string name="javashop_setting_action_receipt">我的发票</string>
+    <string name="javashop_setting_action_privacy">隐私设置</string>
+    <string name="javashop_setting_action_share">应用分享</string>
+    <string name="javashop_setting_action_about">关于</string>
+    <string name="javashop_setting_action_logout">退出登录</string>
+    <string name="javashop_setting_action_cache">清除缓存</string>
+    <string name="javashop_goods_filter_all">全部</string>
+    <string name="javashop_all_brand">全部品牌</string>
+    <string name="javashop_confrim">确定</string>
+    <string name="javashop_cancel">取消</string>
+    <string name="javashop_add_cart">加入购物车</string>
+    <string name="javashop_shop">店铺</string>
+    <string name="javashop_self">自营</string>
+    <string name="javashop_collect">关注</string>
+    <string name="javashop_cart">购物车</string>
+    <string name="javashop_login">登录</string>
+    <string name="javashop_send_message">发送验证码</string>
+    <string name="javashop_use">立即使用</string>
+    <string name="javashop_get">立即领取</string>
+
+    <string name="wdkl_app_name">Mobile App</string>
+    <string name="data_empty">Empty</string>
+    <string name="register_server_ip">Server IP:</string>
+    <string name="register_device_identifier">Identifier:</string>
+    <string name="register_done">Register OK</string>
+    <string name="register_restart">Restart app</string>
+    <string name="register_config_server">Config server</string>
+    <string name="custom_title">Customers</string>
+    <string name="call_list">Call logs</string>
+    <string name="colleague">Colleagues</string>
+    <string name="group_message">Group message</string>
+    <string name="reconnect">Reconnect</string>
+
+    <string name="str_empty">Null</string>
+    <string name="str_null">Null</string>
+    <string name="device_disable">Device disabled</string>
+    <string name="str_disable">Device enable</string>
+    <string name="str_enable">Enabled</string>
+    <string name="setting_params_error">Setting params error:</string>
+    <string name="support_sent">Reinforcements sent</string>
+    <string name="net_error">Network error</string>
+    <string name="call_init_error">Network or sip error, please wait</string>
+    <string name="call_fail">Call failed</string>
+    <string name="tips_reboot">Please reboot device</string>
+    <string name="str_replace">Replace</string>
+    <string name="call_window_title">Call</string>
+
+    <string name="no_response">No response</string>
+    <string name="call_success">Call success</string>
+    <string name="call_in_calling">Calling…</string>
+    <string name="call_connecting">Connecting…</string>
+    <string name="call_in_call">Connected…</string>
+    <string name="call_disconnect">Disconnect</string>
+    <string name="call_error">Connect error</string>
+    <string name="call_reject">Reject</string>
+    <string name="call_busy">Busy</string>
+    <string name="call_incoming">New call…</string>
+    <string name="call_failed">Call error</string>
+    <string name="call_end">Call end</string>
+    <string name="str_call_mute">Mute</string>
+    <string name="str_call_handoff">Handoff</string>
+    <string name="str_call_accept">Accept</string>
+    <string name="str_call_speaker">Speaker</string>
+    <string name="voice_call_speech">%s calling</string>
+
+    <string name="countdown_time">%ds</string>
+    <string name="input_password">Input password</string>
+    <string name="invalid_password">Password error</string>
+    <string name="input_empty">Params error</string>
+    <string name="str_confirm">Confirm</string>
+    <string name="str_cancel">Cancel</string>
+    <string name="str_delete">Delete</string>
+    <string name="str_save">Save</string>
+    <string name="str_loading">Loading</string>
+    <string name="str_yes">Yes</string>
+    <string name="str_no">No</string>
+
+    <string name="download_error">Download error!</string>
+    <string name="download_cancel">Download cancel</string>
+    <string name="update_success">Update success</string>
+    <string name="update_fail">Update failed</string>
+    <string name="downloading">Download…</string>
+    <string name="updating">Updating, please wait</string>
+    <string name="update_no_required">It is currently the latest version</string>
+    <string name="detect_new_version">Detected new version, update now?</string>
+    <string name="new_version_tips">detected new version</string>
+
+    <string name="str_home">Home</string>
+    <string name="str_fees">Fees</string>
+    <string name="str_more">More</string>
+    <string name="str_support">Reinforce</string>
+    <string name="str_call">Call</string>
+
+    <string name="doctor_title">Doctor</string>
+    <string name="nurse_title">Nurse</string>
+    <string name="reboot_device">Reboot</string>
+    <string name="check_update">Check update</string>
+    <string name="server_config">Server config</string>
+    <string name="product_desc">Product:</string>
+    <string name="device_error">Device error, please reboot!</string>
+
+    <string name="str_voice_msg_start">Start record</string>
+    <string name="str_voice_msg_started">Voice recording</string>
+    <string name="str_voice_msg_end">End</string>
+    <string name="str_voice_msg_btn_title">Release to send message</string>
+    <string name="str_voice_msg_btn_text">Press to record message</string>
+    <string name="str_voice_msg_record_loss">time is too short</string>
+    <string name="str_voice_msg_record_cancel">Voice msg canceled</string>
+    <string name="str_voice_msg_send_success">send success</string>
+    <string name="str_voice_msg_send_fail">send failed</string>
+    <string name="str_voice_msg_play">play voice msg</string>
+    <string name="str_im_no_channel">Please enter IM channel</string>
+    <string name="str_im_no_media_button">media button for voice msg disabled</string>
+    <string name="str_im_media_button_unuseful">Please press record button</string>
+    <string name="str_im_stop">Stop</string>
+
+    <string name="str_select_responsible_title">Select responsible</string>
+    <string name="str_select_resposible_err">Responsible error</string>
+    <string name="str_no_resposible">No responsible</string>
+    <string name="str_set_resposible_success">Set responsible success</string>
+    <string name="str_set_resposible_fail">Set responsible failed</string>
+    <string name="str_event_handle_warning">Event need todo</string>
+    <string name="str_event_response">Responsed: %s %s</string>
+    <string name="str_event_cancel">Event canceled</string>
+    <string name="str_event_done">Event done</string>
+    <string name="str_search">Search</string>
+
+    <string name="call_phone_failed">Call failed, please check phone number</string>
+    <string name="phone_type">Mobile-%d; Extend-%d; Host-%d</string>
+    <string name="user_change_success">Change success, please wait.</string>
+    <string name="user_change_failed">Change failed, please retry.</string>
+    <string name="retry_tips">Please retry later</string>
+    <string name="tts_init_success">success</string>
+    <string name="tts_init_failed">fail</string>
+
+    <string name="event_voice_msg">Voice msg</string>
+    <string name="event_voice_call">Call</string>
+    <string name="event_undo">Undo</string>
+    <string name="event_responded">Responded</string>
+    <string name="device_change_check">Change confirm?</string>
+    <string name="device_change_tips">Changing, wait</string>
+    <string name="invalid_phone_number">Invalid phone: %s</string>
+
+    <string name="version_title">Version:</string>
+    <string name="device_id">ID:</string>
+    <string name="device_identifier">Identifier:</string>
+    <string name="server_title">Server:</string>
+    <string name="device_ip">IP:</string>
+    <string name="tts_state">TTS:</string>
+    <string name="call_type">Call type:</string>
+    <string name="str_user_change">User change</string>
+    <string name="str_check_update">Check update</string>
+    <string name="str_system_settings">System settings</string>
+    <string name="media_button_message">Enable media button message:</string>
+
+    <string name="permission_tips">Please grant permissions</string>
+    <string name="device_not_register">Device not registered, please contact your administrator</string>
+    <string name="device_not_register_tips">Device not registered, please contact your administrator, than click register OK button</string>
+    <string name="init_data_error">Init data error, please contact your administrator</string>
+    <string name="init_server_data_error">Init server data error</string>
+    <string name="str_reload">Reload</string>
+    <string name="device_user_empty">Please set device user</string>
+    <string name="tcp_connect_success">Connected</string>
+    <string name="tcp_connect_failed">Disconnected</string>
+    <string name="net_disconnect">Disconnected, please check net</string>
+    <string name="device_user_not_register">User not register</string>
+    <string name="click_twice_start_settings">Click twice open settings</string>
+    <string name="click_twice_to_back">Click again to back</string>
+    <string name="low_power">Low power</string>
+
+    <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="contact_start_load">Start load contact</string>
+    <string name="contact_start_update">Start update, wait a moment.</string>
+    <string name="device_not_registered">Device not registered</string>
+    <string name="contact_load_count">Load contact count: %d</string>
+    <string name="contact_list_item">Contact name: %s, number: %s</string>
+    <string name="contact_updating">Updating</string>
+    <string name="contact_update_complete">Update complete:</string>
+    <string name="contact_update_porgress">Update progress:</string>
+    <string name="contact_add">Add contact:</string>
+    <string name="contact_duplication">Duplicate contact:</string>
+    <string name="contact_number_empty">Empty contact number</string>
+    <string name="contact_delete_complete">Delete contact complete.</string>
+
+    <string name="device_number_update_success">Update success!</string>
+    <string name="device_number_update_failed">Update failed!</string>
+    <string name="device_number_update_empty">Empty number!</string>
+    <string name="grant_write_permission">Please grant write external file permission!</string>
+    <string name="contatc_update_title">Update contact</string>
+    <string name="phone_number_title">My phone number</string>
+    <string name="wait_moment">Please wait</string>
+    <string name="send_sms_number_empty">Send phone number empty</string>
+    <string name="phone_number_check_tips">Please double-check the phone number is correct</string>
+    <string name="check_my_phone_number">Check my phone number</string>
+    <string name="operator_number">Operator number:</string>
+    <string name="check_sms_command">SMS cmd:</string>
+    <string name="str_send">Send</string>
+</resources>

+ 47 - 0
resource/src/main/res/values-zh/arrays.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+
+    <string-array name="language_list">
+        <item value="0">跟随系统</item>
+        <item value="1">英语</item>
+        <item value="2">中文</item>
+        <item value="3">西班牙语</item>
+        <item value="4">俄语</item>
+    </string-array>
+
+    <string-array name="time_zones">
+        <item>GMT-11:00</item>
+        <item>GMT-10:00</item>
+        <item>GMT-09:00</item>
+        <item>GMT-08:00</item>
+        <item>GMT-07:00</item>
+        <item>GMT-06:00</item>
+        <item>GMT-05:00</item>
+        <item>GMT-04:00</item>
+        <item>GMT-03:30</item>
+        <item>GMT-02:00</item>
+        <item>GMT-01:00</item>
+        <item>GMT+00:00</item>
+        <item>GMT+01:00</item>
+        <item>GMT+02:00</item>
+        <item>GMT+03:00</item>
+        <item>GMT+03:30</item>
+        <item>GMT+04:00</item>
+        <item>GMT+04:30</item>
+        <item>GMT+05:00</item>
+        <item>GMT+05:30</item>
+        <item>GMT+05:45</item>
+        <item>GMT+06:00</item>
+        <item>GMT+06:30</item>
+        <item>GMT+07:00</item>
+        <item>GMT+08:00</item>
+        <item>GMT+09:00</item>
+        <item>GMT+09:30</item>
+        <item>GMT+10:00</item>
+        <item>GMT+10:30</item>
+        <item>GMT+11:00</item>
+        <item>GMT+12:00</item>
+        <item>GMT+13:00</item>
+        <item>GMT+14:00</item>
+    </string-array>
+</resources>

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

@@ -0,0 +1,231 @@
+<resources>
+    <string name="javashop_app_name">护士移动端</string>
+    <string name="javashop_qrcode_name">扫啊扫</string>
+    <string name="javashop_navigation_home_title">首页</string>
+    <string name="javashop_navigation_category_title">分类</string>
+    <string name="javashop_navigation_cart_title">购物车</string>
+    <string name="javashop_navigation_persion_title">我的</string>
+    <string name="javashop_cart_shop_item_title">优惠券</string>
+    <string name="javashop_group_promotion_fulldiscount">满折</string>
+    <string name="javashop_group_promotion_fullminus">满减</string>
+    <string name="javashop_group_promotion_point">积分</string>
+    <string name="javashop_group_promotion_freeship">免邮</string>
+    <string name="javashop_group_promotion_gift">赠品</string>
+    <string name="javashop_group_promotion_bonus">赠券</string>
+    <string name="javashop_group_not_full_tobuy">再逛逛</string>
+    <string name="javashop_promotion_string">促销</string>
+    <string name="javashop_singgle_promotion_edit_string">修改</string>
+    <string name="javashop_member_action_order_wait_pay">待付款</string>
+    <string name="javashop_member_action_order_wait_rog">待收货</string>
+    <string name="javashop_member_action_order_wait_comment">待评论</string>
+    <string name="javashop_member_action_aftersale">退换/售后</string>
+    <string name="javashop_member_action_order_all">我的订单</string>
+    <string name="javashop_member_action_point">积分</string>
+    <string name="javashop_member_action_bouns">优惠券</string>
+    <string name="javashop_member_action_goods">收藏商品</string>
+    <string name="javashop_member_action_shop">收藏店铺</string>
+    <string name="javashop_member_action_security">账户安全</string>
+    <string name="javashop_member_action_history">我的足迹</string>
+    <string name="javashop_member_action_address">我的地址</string>
+    <string name="javashop_member_action_user_service">客户服务</string>
+    <string name="javashop_setting_action_receipt">我的发票</string>
+    <string name="javashop_setting_action_privacy">隐私设置</string>
+    <string name="javashop_setting_action_share">应用分享</string>
+    <string name="javashop_setting_action_about">关于</string>
+    <string name="javashop_setting_action_logout">退出登录</string>
+    <string name="javashop_setting_action_cache">清除缓存</string>
+    <string name="javashop_goods_filter_all">全部</string>
+    <string name="javashop_all_brand">全部品牌</string>
+    <string name="javashop_confrim">确定</string>
+    <string name="javashop_cancel">取消</string>
+    <string name="javashop_add_cart">加入购物车</string>
+    <string name="javashop_shop">店铺</string>
+    <string name="javashop_self">自营</string>
+    <string name="javashop_collect">关注</string>
+    <string name="javashop_cart">购物车</string>
+    <string name="javashop_login">登录</string>
+    <string name="javashop_send_message">发送验证码</string>
+    <string name="javashop_use">立即使用</string>
+    <string name="javashop_get">立即领取</string>
+
+    <string name="wdkl_app_name">护士移动端</string>
+    <string name="data_empty">没有数据</string>
+    <string name="register_server_ip">服务器IP:</string>
+    <string name="register_device_identifier">识别码:</string>
+    <string name="register_done">注册完成</string>
+    <string name="register_restart">重启app</string>
+    <string name="register_config_server">配置服务器</string>
+    <string name="custom_title">顾客列表</string>
+    <string name="call_list">通话记录</string>
+    <string name="colleague">同事</string>
+    <string name="group_message">群留言</string>
+    <string name="reconnect">重连中</string>
+
+    <string name="str_empty">暂无</string>
+    <string name="str_null">未知</string>
+    <string name="device_disable">设备未启用</string>
+    <string name="str_disable">未启用</string>
+    <string name="str_enable">已启用</string>
+    <string name="setting_params_error">获取设置参数异常:</string>
+    <string name="support_sent">请求增援已发送</string>
+    <string name="net_error">网络异常</string>
+    <string name="call_init_error">网络异常或sipId异常,请稍后</string>
+    <string name="call_fail">呼叫失败</string>
+    <string name="tips_reboot">请重启设备</string>
+    <string name="str_replace">替换</string>
+    <string name="call_window_title">通话</string>
+
+    <string name="no_response">无人接听</string>
+    <string name="call_success">呼叫成功,等待接听</string>
+    <string name="call_in_calling">正在呼叫…</string>
+    <string name="call_connecting">连接中…</string>
+    <string name="call_in_call">通话中…</string>
+    <string name="call_disconnect">断开连接</string>
+    <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_end">通话结束</string>
+    <string name="str_call_mute">静音</string>
+    <string name="str_call_handoff">挂断</string>
+    <string name="str_call_accept">接听</string>
+    <string name="str_call_speaker">免提</string>
+    <string name="voice_call_speech">%s呼叫</string>
+
+    <string name="countdown_time">%d秒</string>
+    <string name="input_password">请输入密码</string>
+    <string name="invalid_password">密码错误</string>
+    <string name="input_empty">参数不能为空</string>
+    <string name="str_confirm">确定</string>
+    <string name="str_cancel">取消</string>
+    <string name="str_delete">删除</string>
+    <string name="str_save">保存</string>
+    <string name="str_loading">正在加载</string>
+    <string name="str_yes">是</string>
+    <string name="str_no">否</string>
+
+    <string name="download_error">下载路径异常</string>
+    <string name="download_cancel">取消下载</string>
+    <string name="update_success">升级成功</string>
+    <string name="update_fail">升级失败</string>
+    <string name="downloading">正在下载中…</string>
+    <string name="updating">正在升级中,请稍后</string>
+    <string name="update_no_required">当前已是最新版本</string>
+    <string name="detect_new_version">检测到新版本,是否升级?</string>
+    <string name="new_version_tips">检测到新版本</string>
+
+    <string name="str_home">首页</string>
+    <string name="str_fees">费用</string>
+    <string name="str_more">更多</string>
+    <string name="str_support">增援</string>
+    <string name="str_call">呼叫</string>
+
+    <string name="doctor_title">责任医生</string>
+    <string name="nurse_title">责任护士</string>
+    <string name="reboot_device">重启设备</string>
+    <string name="check_update">检查升级</string>
+    <string name="server_config">服务器配置</string>
+    <string name="product_desc">产品说明:</string>
+    <string name="device_error">设备网络出现异常,请检查网络或尝试断电重启!</string>
+
+    <string name="str_voice_msg_start">开始留言</string>
+    <string name="str_voice_msg_started">留言中</string>
+    <string name="str_voice_msg_end">结束</string>
+    <string name="str_voice_msg_btn_title">松开留言,上滑取消</string>
+    <string name="str_voice_msg_btn_text">按住说话</string>
+    <string name="str_voice_msg_record_loss">说话时间太短</string>
+    <string name="str_voice_msg_record_cancel">语音留言已取消</string>
+    <string name="str_voice_msg_send_success">留言发送成功</string>
+    <string name="str_voice_msg_send_fail">留言发送失败</string>
+    <string name="str_voice_msg_play">播放留言</string>
+    <string name="str_im_no_channel">请先加入群留言频道</string>
+    <string name="str_im_no_media_button">未开启按键留言</string>
+    <string name="str_im_media_button_unuseful">请使用屏幕按钮留言</string>
+    <string name="str_im_stop">停止</string>
+
+    <string name="str_select_responsible_title">请选择处理人</string>
+    <string name="str_select_resposible_err">选择处理人错误</string>
+    <string name="str_no_resposible">没有相关处理人员</string>
+    <string name="str_set_resposible_success">分配处理人员成功</string>
+    <string name="str_set_resposible_fail">分配处理人员失败</string>
+    <string name="str_event_handle_warning">您还有事件未处理</string>
+    <string name="str_event_response">已响应: %s %s</string>
+    <string name="str_event_cancel">事件已取消</string>
+    <string name="str_event_done">事件已完成</string>
+    <string name="str_search">搜索</string>
+
+    <string name="call_phone_failed">呼叫失败,请检查手机号</string>
+    <string name="phone_type">手机-%d; 分机-%d; 主机-%d</string>
+    <string name="user_change_success">换班通知发送成功,请等待处理</string>
+    <string name="user_change_failed">换班通知发送失败,请重试</string>
+    <string name="retry_tips">请10秒后再尝试</string>
+    <string name="tts_init_success">正常</string>
+    <string name="tts_init_failed">异常</string>
+
+    <string name="event_voice_msg">语音留言</string>
+    <string name="event_voice_call">呼叫</string>
+    <string name="event_undo">未处理</string>
+    <string name="event_responded">已响应</string>
+    <string name="device_change_check">是否确认切换?</string>
+    <string name="device_change_tips">切换中,请稍后</string>
+    <string name="invalid_phone_number">非法号码: %s</string>
+
+    <string name="version_title">版本:</string>
+    <string name="device_id">设备ID:</string>
+    <string name="device_identifier">设备标识码:</string>
+    <string name="server_title">服务器:</string>
+    <string name="device_ip">设备IP:</string>
+    <string name="tts_state">TTS 状态:</string>
+    <string name="call_type">通话方式:</string>
+    <string name="str_user_change">PC 关联</string>
+    <string name="str_check_update">检查升级</string>
+    <string name="str_system_settings">系统设置</string>
+    <string name="media_button_message">开启按键留言:</string>
+
+    <string name="permission_tips">请先授权再进入APP</string>
+    <string name="device_not_register">本机未注册,请将识别码发给管理员</string>
+    <string name="device_not_register_tips">本机未注册,请将识别码发给管理员。管理员注册本机后请点击注册完成进入</string>
+    <string name="init_data_error">初始化数据不全,请联系管理员</string>
+    <string name="init_server_data_error">初始化服务器连接数据不全</string>
+    <string name="str_reload">重载</string>
+    <string name="device_user_empty">请使用PC设置使用人</string>
+    <string name="tcp_connect_success">已连接</string>
+    <string name="tcp_connect_failed">断开连接</string>
+    <string name="net_disconnect">断开连接,请检查网络</string>
+    <string name="device_user_not_register">设备未绑定</string>
+    <string name="click_twice_start_settings">再点一次进入设置</string>
+    <string name="click_twice_to_back">再按一次退出</string>
+    <string name="low_power">电量低</string>
+
+    <string name="language_set_title">语言设置:</string>
+    <string name="language_set_mode">是否同步服务器语言:</string>
+    <string name="str_language_settings">语言设置</string>
+
+    <string name="contatc_update_title">更新通讯录</string>
+    <string name="contact_start_load">开始获取联系人</string>
+    <string name="contact_start_update">开始更新,可能需要几分钟时间</string>
+    <string name="device_not_registered">设备未注册</string>
+    <string name="contact_load_count">获取到%d个联系人</string>
+    <string name="contact_list_item">联系人名称: %s, 号码: %s</string>
+    <string name="contact_updating">开始更新</string>
+    <string name="contact_update_complete">更新完成:</string>
+    <string name="contact_update_porgress">正在更新:</string>
+    <string name="contact_add">添加联系人:</string>
+    <string name="contact_duplication">相同号码联系人:</string>
+    <string name="contact_number_empty">号码为空,不更新</string>
+    <string name="contact_delete_complete">删除本地联系人完成.</string>
+
+    <string name="phone_number_title">本机号码</string>
+    <string name="device_number_update_success">更新成功!</string>
+    <string name="device_number_update_failed">更新失败!</string>
+    <string name="device_number_update_empty">号码不能为空</string>
+    <string name="grant_write_permission">请授予外部存储访问权限</string>
+    <string name="wait_moment">请稍后</string>
+    <string name="send_sms_number_empty">运营商号码或短信指令为空</string>
+    <string name="phone_number_check_tips">请仔细检查本机号码是否正确,如不正确请手动修改,然后点击确定按钮更新号码; 如正确请直接点击下方确定按钮更新号码.</string>
+    <string name="check_my_phone_number">查询本机号码</string>
+    <string name="operator_number">运营商号码:</string>
+    <string name="check_sms_command">短信指令:</string>
+    <string name="str_send">发送</string>
+</resources>

+ 47 - 0
resource/src/main/res/values/arrays.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<resources>
+
+    <string-array name="language_list">
+        <item value="0">Auto</item>
+        <item value="1">English</item>
+        <item value="2">Chinese</item>
+        <item value="3">Spanish</item>
+        <item value="4">Russian</item>
+    </string-array>
+
+    <string-array name="time_zones">
+        <item>GMT-11:00</item>
+        <item>GMT-10:00</item>
+        <item>GMT-09:00</item>
+        <item>GMT-08:00</item>
+        <item>GMT-07:00</item>
+        <item>GMT-06:00</item>
+        <item>GMT-05:00</item>
+        <item>GMT-04:00</item>
+        <item>GMT-03:30</item>
+        <item>GMT-02:00</item>
+        <item>GMT-01:00</item>
+        <item>GMT+00:00</item>
+        <item>GMT+01:00</item>
+        <item>GMT+02:00</item>
+        <item>GMT+03:00</item>
+        <item>GMT+03:30</item>
+        <item>GMT+04:00</item>
+        <item>GMT+04:30</item>
+        <item>GMT+05:00</item>
+        <item>GMT+05:30</item>
+        <item>GMT+05:45</item>
+        <item>GMT+06:00</item>
+        <item>GMT+06:30</item>
+        <item>GMT+07:00</item>
+        <item>GMT+08:00</item>
+        <item>GMT+09:00</item>
+        <item>GMT+09:30</item>
+        <item>GMT+10:00</item>
+        <item>GMT+10:30</item>
+        <item>GMT+11:00</item>
+        <item>GMT+12:00</item>
+        <item>GMT+13:00</item>
+        <item>GMT+14:00</item>
+    </string-array>
+</resources>

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

@@ -1,5 +1,5 @@
 <resources>
-    <string name="javashop_app_name">NCS-腕表</string>
+    <string name="javashop_app_name">Mobile app</string>
     <string name="javashop_qrcode_name">扫啊扫</string>
     <string name="javashop_navigation_home_title">首页</string>
     <string name="javashop_navigation_category_title">分类</string>
@@ -48,5 +48,184 @@
     <string name="javashop_use">立即使用</string>
     <string name="javashop_get">立即领取</string>
 
-    <string name="data_empty">没有数据</string>
+    <string name="wdkl_app_name">Mobile App</string>
+    <string name="data_empty">Empty</string>
+    <string name="register_server_ip">Server IP:</string>
+    <string name="register_device_identifier">Identifier:</string>
+    <string name="register_done">Register OK</string>
+    <string name="register_restart">Restart app</string>
+    <string name="register_config_server">Config server</string>
+    <string name="custom_title">Customers</string>
+    <string name="call_list">Call logs</string>
+    <string name="colleague">Colleagues</string>
+    <string name="group_message">Group message</string>
+    <string name="reconnect">Reconnect</string>
+
+    <string name="str_empty">Null</string>
+    <string name="str_null">Null</string>
+    <string name="device_disable">Device disabled</string>
+    <string name="str_disable">Device enable</string>
+    <string name="str_enable">Enabled</string>
+    <string name="setting_params_error">Setting params error:</string>
+    <string name="support_sent">Reinforcements sent</string>
+    <string name="net_error">Network error</string>
+    <string name="call_init_error">Network or sip error, please wait</string>
+    <string name="call_fail">Call failed</string>
+    <string name="tips_reboot">Please reboot device</string>
+    <string name="str_replace">Replace</string>
+    <string name="call_window_title">Call</string>
+
+    <string name="no_response">No response</string>
+    <string name="call_success">Call success</string>
+    <string name="call_in_calling">Calling…</string>
+    <string name="call_connecting">Connecting…</string>
+    <string name="call_in_call">Connected…</string>
+    <string name="call_disconnect">Disconnect</string>
+    <string name="call_error">Connect error</string>
+    <string name="call_reject">Reject</string>
+    <string name="call_busy">Busy</string>
+    <string name="call_incoming">New call…</string>
+    <string name="call_failed">Call error</string>
+    <string name="call_end">Call end</string>
+    <string name="str_call_mute">Mute</string>
+    <string name="str_call_handoff">Handoff</string>
+    <string name="str_call_accept">Accept</string>
+    <string name="str_call_speaker">Speaker</string>
+    <string name="voice_call_speech">%s calling</string>
+
+    <string name="countdown_time">%ds</string>
+    <string name="input_password">Input password</string>
+    <string name="invalid_password">Password error</string>
+    <string name="input_empty">Params error</string>
+    <string name="str_confirm">Confirm</string>
+    <string name="str_cancel">Cancel</string>
+    <string name="str_delete">Delete</string>
+    <string name="str_save">Save</string>
+    <string name="str_loading">Loading</string>
+    <string name="str_yes">Yes</string>
+    <string name="str_no">No</string>
+
+    <string name="download_error">Download error!</string>
+    <string name="download_cancel">Download cancel</string>
+    <string name="update_success">Update success</string>
+    <string name="update_fail">Update failed</string>
+    <string name="downloading">Download…</string>
+    <string name="updating">Updating, please wait</string>
+    <string name="update_no_required">It is currently the latest version</string>
+    <string name="detect_new_version">Detected new version, update now?</string>
+    <string name="new_version_tips">detected new version</string>
+
+    <string name="str_home">Home</string>
+    <string name="str_fees">Fees</string>
+    <string name="str_more">More</string>
+    <string name="str_support">Reinforce</string>
+    <string name="str_call">Call</string>
+
+    <string name="doctor_title">Doctor</string>
+    <string name="nurse_title">Nurse</string>
+    <string name="reboot_device">Reboot</string>
+    <string name="check_update">Check update</string>
+    <string name="server_config">Server config</string>
+    <string name="product_desc">Product:</string>
+    <string name="device_error">Device error, please reboot!</string>
+
+    <string name="str_voice_msg_start">Start record</string>
+    <string name="str_voice_msg_started">Voice recording</string>
+    <string name="str_voice_msg_end">End</string>
+    <string name="str_voice_msg_btn_title">Release to send message</string>
+    <string name="str_voice_msg_btn_text">Press to record message</string>
+    <string name="str_voice_msg_record_loss">time is too short</string>
+    <string name="str_voice_msg_record_cancel">Voice msg canceled</string>
+    <string name="str_voice_msg_send_success">send success</string>
+    <string name="str_voice_msg_send_fail">send failed</string>
+    <string name="str_voice_msg_play">play voice msg</string>
+    <string name="str_im_no_channel">Please enter IM channel</string>
+    <string name="str_im_no_media_button">media button for voice msg disabled</string>
+    <string name="str_im_media_button_unuseful">Please press record button</string>
+    <string name="str_im_stop">Stop</string>
+
+    <string name="str_select_responsible_title">Select responsible</string>
+    <string name="str_select_resposible_err">Responsible error</string>
+    <string name="str_no_resposible">No responsible</string>
+    <string name="str_set_resposible_success">Set responsible success</string>
+    <string name="str_set_resposible_fail">Set responsible failed</string>
+    <string name="str_event_handle_warning">Event need todo</string>
+    <string name="str_event_response">Responsed: %s %s</string>
+    <string name="str_event_cancel">Event canceled</string>
+    <string name="str_event_done">Event done</string>
+    <string name="str_search">Search</string>
+
+    <string name="call_phone_failed">Call failed, please check phone number</string>
+    <string name="phone_type">Mobile-%d; Extend-%d; Host-%d</string>
+    <string name="user_change_success">Change success, please wait.</string>
+    <string name="user_change_failed">Change failed, please retry.</string>
+    <string name="retry_tips">Please retry later</string>
+    <string name="tts_init_success">success</string>
+    <string name="tts_init_failed">fail</string>
+
+    <string name="event_voice_msg">Voice msg</string>
+    <string name="event_voice_call">Call</string>
+    <string name="event_undo">Undo</string>
+    <string name="event_responded">Responded</string>
+    <string name="device_change_check">Change confirm?</string>
+    <string name="device_change_tips">Changing, wait</string>
+    <string name="invalid_phone_number">Invalid phone: %s</string>
+
+    <string name="version_title">Version:</string>
+    <string name="device_id">ID:</string>
+    <string name="device_identifier">Identifier:</string>
+    <string name="server_title">Server:</string>
+    <string name="device_ip">IP:</string>
+    <string name="tts_state">TTS:</string>
+    <string name="call_type">Call type:</string>
+    <string name="str_user_change">User change</string>
+    <string name="str_check_update">Check update</string>
+    <string name="str_system_settings">System settings</string>
+    <string name="media_button_message">Enable media button message:</string>
+
+    <string name="permission_tips">Please grant permissions</string>
+    <string name="device_not_register">Device not registered, please contact your administrator</string>
+    <string name="device_not_register_tips">Device not registered, please contact your administrator, than click register OK button</string>
+    <string name="init_data_error">Init data error, please contact your administrator</string>
+    <string name="init_server_data_error">Init server data error</string>
+    <string name="str_reload">Reload</string>
+    <string name="device_user_empty">Please set device user</string>
+    <string name="tcp_connect_success">Connected</string>
+    <string name="tcp_connect_failed">Disconnected</string>
+    <string name="net_disconnect">Disconnected, please check net</string>
+    <string name="device_user_not_register">User not register</string>
+    <string name="click_twice_start_settings">Click twice open settings</string>
+    <string name="click_twice_to_back">Click again to back</string>
+    <string name="low_power">Low power</string>
+
+    <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="contact_start_load">Start load contact</string>
+    <string name="contact_start_update">Start update, wait a moment.</string>
+    <string name="device_not_registered">Device not registered</string>
+    <string name="contact_load_count">Load contact count: %d</string>
+    <string name="contact_list_item">Contact name: %s, number: %s</string>
+    <string name="contact_updating">Updating</string>
+    <string name="contact_update_complete">Update complete:</string>
+    <string name="contact_update_porgress">Update progress:</string>
+    <string name="contact_add">Add contact:</string>
+    <string name="contact_duplication">Duplicate contact:</string>
+    <string name="contact_number_empty">Empty contact number</string>
+    <string name="contact_delete_complete">Delete contact complete.</string>
+
+    <string name="device_number_update_success">Update success!</string>
+    <string name="device_number_update_failed">Update failed!</string>
+    <string name="device_number_update_empty">Empty number!</string>
+    <string name="grant_write_permission">Please grant write external file permission!</string>
+    <string name="contatc_update_title">Update contact</string>
+    <string name="phone_number_title">My phone number</string>
+    <string name="wait_moment">Please wait</string>
+    <string name="send_sms_number_empty">Send phone number empty</string>
+    <string name="phone_number_check_tips">Please double-check the phone number is correct</string>
+    <string name="check_my_phone_number">Check my phone number</string>
+    <string name="operator_number">Operator number:</string>
+    <string name="check_sms_command">SMS cmd:</string>
+    <string name="str_send">Send</string>
 </resources>