Browse Source

修复语言问题
远程推送apk或图片

ccc 2 months ago
parent
commit
dccfb4c80d
24 changed files with 920 additions and 233 deletions
  1. 1 1
      app/build.gradle
  2. 0 1
      app/src/main/java/com/sunzee/app/AppApplication.kt
  3. 2 2
      buildSrc/src/main/kotlin/com/quyunshuo/androidbaseframemvvm/buildsrc/ProjectBuildConfig.kt
  4. 1 1
      lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt
  5. 15 1
      lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt
  6. 73 53
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/LanguageUtil.kt
  7. 284 0
      lib_base/src/main/res/values-ar/strings.xml
  8. 1 1
      lib_base/src/main/res/values-de/strings.xml
  9. 282 0
      lib_base/src/main/res/values-fr/strings.xml
  10. 2 0
      lib_base/src/main/res/values/strings.xml
  11. 1 0
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/constant/MqName.kt
  12. 1 4
      lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt
  13. 3 2
      module_backstage/src/main/AndroidManifest.xml
  14. 5 6
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt
  15. 61 59
      module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt
  16. 44 43
      module_backstage/src/main/java/com/module/backstage/fragment/LanguageFragment.kt
  17. 3 1
      module_backstage/src/main/java/com/module/backstage/fragment/product/DebugProductFragment.kt
  18. 39 41
      module_backstage/src/main/java/com/module/backstage/vm/LanguageFragmentVM.kt
  19. 3 10
      module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt
  20. 1 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt
  21. 94 1
      module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt
  22. BIN
      module_home/src/main/res/drawable/icon_warring.png
  23. 3 4
      module_home/src/main/res/layout/backstage_dialog_warring.xml
  24. 1 1
      module_pay/src/main/java/com/module/pay/common/OtherEnum.kt

+ 1 - 1
app/build.gradle

@@ -35,7 +35,7 @@ android {
             abiFilters 'armeabi-v7a', 'arm64-v8a'
         }
 
-        resConfig 'en'
+//        resConfig 'de'
 
         packagingOptions {
             exclude 'META-INF/io.netty.versions.properties'

+ 0 - 1
app/src/main/java/com/sunzee/app/AppApplication.kt

@@ -59,7 +59,6 @@ class AppApplication : BaseApplication() {
             } else {
                 startService(intent)
             }
-
             //开启MQ
             startService(Intent(this, MqService::class.java))
             XLogUtil.init()

+ 2 - 2
buildSrc/src/main/kotlin/com/quyunshuo/androidbaseframemvvm/buildsrc/ProjectBuildConfig.kt

@@ -11,8 +11,8 @@ object ProjectBuildConfig {
     const val applicationId = "com.quyunshuo.androidbaseframemvvm"
     const val minSdkVersion = 21
     const val targetSdkVersion = 29
-    const val versionCode = 3
-    const val versionName = "1.0.3"
+    const val versionCode = 4
+    const val versionName = "1.0.4"
     const val isAppMode = false
     /**
      * 项目当前的版本状态

+ 1 - 1
lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/BaseApplication.kt

@@ -35,7 +35,7 @@ open class BaseApplication : MultiDexApplication() {
         super.attachBaseContext(base)
         context = base
         application = this
-        mLoadModuleProxy.onAttachBaseContext(base)
+//        mLoadModuleProxy.onAttachBaseContext(base)
     }
 
     override fun onCreate() {

+ 15 - 1
lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/mvvm/v/BaseFrameActivity.kt

@@ -1,10 +1,12 @@
 package com.quyunshuo.androidbaseframemvvm.base.mvvm.v
 
+import android.content.Context
 import android.content.res.Resources
 import android.os.Bundle
 import android.os.Debug
 import android.os.Looper
 import android.util.Log
+import android.view.View
 import androidx.appcompat.app.AppCompatActivity
 import androidx.viewbinding.ViewBinding
 import com.alibaba.android.arouter.launcher.ARouter
@@ -45,9 +47,13 @@ abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppComp
             mHaveRegisterEventBus = true
             EventBusUtils.register(this)
         }
-
+        val languageType = SpUtils.getInt("LANGUAGE_TYPE", 0)!!
+        val lang = LanguageUtil.language[languageType]
+        Log.d("backinfo", "语言:" + lang)
+        LanguageUtil.setAppLanguage(this, lang)
         setStatusBar()
         mBinding.initView()
+        window.decorView.layoutDirection = View.LAYOUT_DIRECTION_LTR
         initNetworkListener()
         initObserve()
         initRequestData()
@@ -103,4 +109,12 @@ abstract class BaseFrameActivity<VB : ViewBinding, VM : BaseViewModel> : AppComp
         }
         return super.getResources()
     }
+
+    override fun attachBaseContext(newBase: Context) {
+        val languageType = SpUtils.getInt("LANGUAGE_TYPE", 0)!!
+        val language = LanguageUtil.language[languageType]
+        val context = LanguageUtil.setAppLanguage(newBase, language)
+        // 在 Android 10 上需要手动应用语言
+        super.attachBaseContext(context)
+    }
 }

+ 73 - 53
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/util/LanguageUtil.kt

@@ -1,4 +1,4 @@
-package com.quyunshuo.androidbaseframemvvm.common.util
+package com.quyunshuo.androidbaseframemvvm.base.utils
 
 import android.content.Context
 import android.content.res.Configuration
@@ -6,18 +6,11 @@ import android.content.res.Resources
 import android.os.Build
 import android.util.Log
 import com.quyunshuo.androidbaseframemvvm.base.BaseApplication
-import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
-import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
 import java.util.Locale
 
-
-/**
- * 语言切换工具
- * 语言代码参考(https://www.cnblogs.com/jacksoft/p/5771130.html)
- */
-private const val TAG = "LanguageUtil"
 object LanguageUtil {
     // 中文 英文 德语 俄语 日语 西班牙语 法语
+    private const val TAG = "LanguageUtil"
 
         val language: Array<String> = arrayOf(
             "zh_CN", "en", "de", "ru", "ja", "es",
@@ -155,51 +148,54 @@ object LanguageUtil {
     ))
 
     fun setLanguage(): String {
-        val languageType = SpUtils.getInt(MMKVName.LANGUAGE_TYPE, -1)
+        val languageType = SpUtils.getInt("LANGUAGE_TYPE", 0)
         val languageStr = when (languageType) {
-            1 -> CHINESE
-            2 -> ENGLISH
-            3 -> GERMAN
-            4 -> RUSSIA
-            5 -> JAPANESE
-            6 -> SPANISH
-            7 -> FRENCH
-            8 -> BULGARIA
-            9 -> DanMai
-            10 -> FenLan
-            11 -> HeLan
-            12 -> JieKe
-            13 -> RouMaNiYa
-            14 -> NuoWei
-            15 -> PuTaoYa
-            16 -> RuiShi
-            17 -> SiFaLuoKe
-            18 -> XiongYaLi
-            19 -> YiDaLi
-            20 -> TaiWang
-            21 -> hangguo
-            22 -> bolan
-            23 -> wukelan
-            24 -> ymny
-            25 -> alb
-            26 -> tg
-            27 -> ysl
-            28 -> brazil
-            29 -> gljy
-            30 -> brazi2
-            31 -> turkey
-            32 -> latvia
-            33 -> ricardoAmaro
-            34 -> eesti
-            35 -> mgy
-            36 -> bsy
-            37 -> slwny
-            38 -> kldy
-            39 -> bsny
-            else -> CHINESE
+            0 -> CHINESE
+            1 -> ENGLISH
+            2 -> GERMAN
+            3 -> RUSSIA
+            4 -> JAPANESE
+            5 -> SPANISH
+            6 -> FRENCH
+            7 -> BULGARIA
+            8 -> DanMai
+            9 -> FenLan
+            10 -> HeLan
+            11 -> JieKe
+            12 -> RouMaNiYa
+            13 -> NuoWei
+            14 -> PuTaoYa
+            15 -> RuiShi
+            16 -> SiFaLuoKe
+            17 -> XiongYaLi
+            18 -> YiDaLi
+            19 -> TaiWang
+            20 -> hangguo
+            21 -> bolan
+            22 -> wukelan
+            23 -> ymny
+            24 -> alb
+            25 -> tg
+            26 -> ysl
+            27 -> brazil
+            28 -> gljy
+            29 -> brazi2
+            30 -> turkey
+            31 -> latvia
+            32 -> ricardoAmaro
+            33 -> eesti
+            34 -> mgy
+            35 -> bsy
+            36 -> slwny
+            37 -> kldy
+            38 -> bsny
+            else -> {
+                SpUtils.putInt("LANGUAGE_TYPE", 0)
+                CHINESE
+            }
         }
         selectLanguage(languageStr) // 调用设置语言方法
-        Log.d(TAG, "setLanguage: "+languageStr)
+        Log.d(TAG, "setLanguage: " + languageStr + languageType)
         return languageStr
     }
 
@@ -225,9 +221,33 @@ object LanguageUtil {
         val displayMetrics = resources.displayMetrics
         val myLocale = Locale(language)
         configuration.locale = myLocale
-
         resources.updateConfiguration(configuration, displayMetrics)
+    }
+    fun setAppLanguage(context: Context, languageCode: String?): Context {
+        var context = context
+        val locale = Locale(languageCode)
+        Locale.setDefault(locale)
+        val res = context.resources
+        val config = Configuration(res.configuration)
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            config.setLocale(locale)
+            context = context.createConfigurationContext(config)
+        } else {
+            config.locale = locale
+            res.updateConfiguration(config, res.displayMetrics)
+        }
+        return context
+    }
 
+//    fun persist(context: Context?, language: String?) {
+//        val preferences = PreferenceManager.getDefaultSharedPreferences(context)
+//        val editor = preferences.edit()
+//        editor.putString(SELECTED_LANGUAGE, language)
+//        editor.apply()
+//    }
+//    fun getPersistedData(context: Context, defaultLanguage: String): String? {
+//        val preferences = PreferenceManager.getDefaultSharedPreferences(context)
+//        return preferences.getString(SELECTED_LANGUAGE, defaultLanguage)
+//    }
 
-    }
 }

+ 284 - 0
lib_base/src/main/res/values-ar/strings.xml

@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="base_network_disconnected">الشبكة غير متصلة</string>
+    <string name="base_network_connected">الشبكة متصلة</string>
+
+    <string name="base_plc_debug_1">النقطة الأساسية الثانوية 1</string>
+    <string name="base_plc_debug_2">مضخة هواء منخفضة السرعة</string>
+    <string name="base_plc_debug_3">مضخة هواء متوسطة السرعة</string>
+    <string name="base_plc_debug_4">مضخة هواء عالية السرعة</string>
+    <string name="base_plc_debug_5">سلك تسخين</string>
+    <string name="base_plc_debug_6">محرك ذرة حلوة للأمام</string>
+    <string name="base_plc_debug_7">محرك ذرة حلوة للخلف</string>
+    <string name="base_plc_debug_8">محرك ذرة ملحية للأمام</string>
+    <string name="base_plc_debug_9">محرك ذرة ملحية عكسي</string>
+    <string name="base_plc_debug_10">محرك إسقاط الكأس</string>
+    <string name="base_plc_debug_11">حاجز</string>
+    <string name="base_plc_debug_12">باب التقاط الطعام</string>
+    <string name="base_plc_debug_13">موضع القلب الثانوي 13</string>
+    <string name="base_plc_debug_14">موضع القلب الثانوي 14</string>
+    <string name="base_plc_debug_15">موضع القلب الثانوي 15</string>
+    <string name="base_plc_debug_16">موضع القلب الثانوي 16</string>
+    <string name="base_plc_debug_17">موضع القلب الثانوي ١٧</string>
+    <string name="base_plc_debug_18">موضع النواة الثانوية ١٨</string>
+    <string name="base_plc_debug_19">موضع النواة الثانوية ١٩</string>
+    <string name="base_plc_debug_20">نقطة النواة الثانوية ٢٠</string>
+    <string name="base_plc_debug_21"></string>
+    <string name="base_plc_debug_22"></string>
+    <string name="base_plc_debug_23"></string>
+
+    <string name="base_plc_param_1">مضخة هواء منخفضة السرعة</string>
+    <string name="base_plc_param_2">مضخة هواء متوسطة السرعة</string>
+    <string name="base_plc_param_3">مضخة هواء عالية السرعة</string>
+    <string name="base_plc_param_4">رياح شديدة الوقت</string>
+    <string name="base_plc_param_5">وقت إغلاق الحاجز</string>
+    <string name="base_plc_param_6">إعداد درجة الحرارة</string>
+    <string name="base_plc_param_7">وقت التسخين</string>
+    <string name="base_plc_param_8">سرعة الرياح أثناء الإنتاج</string>
+    <string name="base_plc_param_9">الحد الأقصى لعزل المبخر</string>
+    <string name="base_plc_alarm_1">الذرة لا تُفرقع</string>
+    <string name="base_plc_alarm_2">الكوب مفقود</string>
+    <string name="base_plc_alarm_3">ذرة مملحة مفقودة</string>
+    <string name="base_plc_alarm_4">ذرة حلوة مفقودة</string>
+    <string name="base_plc_alarm_5">لا ارتفاع في درجة الحرارة</string>
+    <string name="base_plc_alarm_6">درجة الحرارة مرتفعة جدًا</string>
+    <string name="base_plc_alarm_7">فشل إعادة ضبط الحاجز</string>
+    <string name="base_plc_alarm_8">كوز الذرة عالق</string>
+
+    <string name="base_pro_01">فشار حلو</string>
+    <string name="base_pro_02">فشار مالح</string>
+    <string name="base_two_code">WeChat Alipay</string>
+    <string name="base_bill_coin">عملات ورقية ومعدنية</string>
+    <string name="base_nayax">Nayax</string>
+    <string name="base_mdb_no_cash">بطاقة ائتمان MDB</string>
+    <string name="base_soepay">Soepay</string>
+    <string name="base_other1">إعدادات النظام</string>
+    <string name="base_other2">إعدادات المنفذ التسلسلي</string>
+    <string name="base_other3">تفعيل الوظيفة</string>
+    <string name="base_other4">إعدادات سلة التسوق</string>
+    <string name="base_other5">تغيير الإعدادات</string>
+    <string name="base_other6">أخرى</string>
+    <string name="shopping_trolley">سلة التسوق</string>
+    <string name="promotion_code">رمز العرض الترويجي</string>
+    <string name="change">تغيير الوظيفة</string>
+    <string name="agreement">بروتوكول الاتصال</string>
+    <string name="bill_country">اختيار الأوراق النقدية الوطنية</string>
+    <string name="ttys_nayax">منفذ نايكس التسلسلي</string>
+    <string name="ttys_mdb">منفذ MDB التسلسلي</string>
+    <string name="ttys_plc">منفذ PLC التسلسلي</string>
+    <string name="nayax_mode">وضع ناياكس الخامل</string>
+    <string name="bill_collocation">حفظ الأوراق النقدية في قاعدة بيانات قاعدة البيانات</string>
+    <string name="mdb_level">مستوى قاعدة بيانات قاعدة البيانات L3</string>
+    <string name="base_free_pay">إنتاج مجاني</string>
+    <string name="way_contacts">جهة الاتصال:</string>
+    <string name="name_contacts">جهة الاتصال:</string>
+
+    <string name="backstage_update_success">تم التحديث بنجاح</string>
+    <string name="backstage_data_null_tips">البيانات فارغة، لا يمكن تشغيلها</string>
+    <string name="backstage_check_update">التحقق من وجود تحديثات</string>
+    <string name="backstage_system_set">إعدادات النظام</string>
+    <string name="backstage_setting_1">إعدادات المنتج</string>
+    <string name="backstage_setting_2">تعديل المعلمات</string>
+    <string name="backstage_setting_3">إحصائيات البيانات</string>
+    <string name="backstage_setting_4">تبديل اللغة</string>
+    <string name="backstage_setting_5">سجل التنبيه</string>
+    <string name="backstage_setting_6">إعادة تعيين كلمة المرور</string>
+    <string name="backstage_setting_6_1">إعادة تعيين كلمة المرور</string>
+    <string name="backstage_setting_7">تشغيل وإيقاف التشغيل المجدول</string>
+    <string name="backstage_setting_8">إعدادات الأذونات</string>
+    <string name="backstage_setting_9">أخرى</string>
+    <string name="backstage_setting_10">طريقة الدفع</string>
+    <string name="backstage_product_1">تعديل سعر المنتج</string>
+    <string name="backstage_product_2">إعدادات معلومات المنتج</string>
+    <string name="backstage_product_3">اسم المنتج، تعديل الصورة</string>
+    <string name="backstage_product_4">تصحيح أخطاء المنتج</string>
+    <string name="backstage_param_set_1">صفحة التصحيح</string>
+    <string name="backstage_param_set_2">المعلمات العامة</string>
+    <string name="backstage_param_set_3">حماية التنبيه</string>
+    <string name="backstage_back">العودة</string>
+    <string name="backstage_version">رقم الإصدار:</string>
+    <string name="backstage_connected">متصل:</string>
+    <string name="backstage_open_dev_tips">هل ترغب في تشغيل الجهاز فورًا؟ </string>
+    <string name="backstage_start_dev">ابدأ الآن</string>
+    <string name="backstage_cancle">إلغاء</string>
+    <string name="backstage_quit_app">انقر على زر الرجوع مرة أخرى للخروج</string>
+    <string name="backstage_latest_version">هذا هو الإصدار الأحدث~</string>
+    <string name="backstage_connecting">تطبيق الاتصال</string>
+    <string name="backstage_update_price">تأكيد تعديل السعر</string>
+    <string name="backstage_connection_server">الاتصال بالخادم</string>
+    <string name="backstage_connection_server_tips">تقديم طلب لنظام اتصال عن بُعد</string>
+    <string name="backstage_connection_server_hint">الرجاء إدخال معرف نظام الإدارة</string>
+    <string name="backstage_connection_server_btn">تقديم طلب الآن</string>
+    <string name="backstage_update_now">تحديث الآن</string>
+    <string name="backstage_new_version_discover">تم العثور على إصدار جديد:</string>
+    <string name="backstage_down_progress">تقدم التنزيل:</string>
+    <string name="backstage_old_password">كلمة المرور القديمة</string>
+    <string name="backstage_old_password_input">يرجى إدخال كلمة المرور القديمة</string>
+    <string name="backstage_new_password">كلمة المرور الجديدة</string>
+    <string name="backstage_new_password_input">يرجى إدخال كلمة المرور الجديدة</string>
+    <string name="backstage_confirm_password">تأكيد كلمة المرور</string>
+    <string name="backstage_confirm_password_input">يرجى إدخال كلمة مرور التأكيد</string>
+    <string name="backstage_confirm">تأكيد</string>
+    <string name="backstage_update_progress_init_status">تقدم التنزيل: ٠٪</string>
+    <string name="backstage_update">تحديث</string>
+    <string name="backstage_confirm_update">تأكيد التغييرات</string>
+    <string name="backstage_ok_dialog_title">هل أنت متأكد من رغبتك في القيام بذلك؟ </string>
+    <string name="backstage_search_hint">الرجاء إدخال المحتوى للبحث</string>
+    <string name="backstage_steam_wendu">درجة حرارة البخار</string>
+    <string name="backstage_choose_time">الرجاء إدخال الوقت</string>
+    <string name="backstage_year_input">الرجاء إدخال السنة</string>
+    <string name="backstage_month_input">الرجاء إدخال الشهر</string>
+    <string name="backstage_day_input">الرجاء إدخال اليوم</string>`
+    <string name="backstage_hour_input">الرجاء إدخال الساعة</string>
+    <string name="backstage_ringht_month_input">الرجاء إدخال الشهر الصحيح</string>
+    <string name="backstage_ringht_day_input">الرجاء إدخال اليوم الصحيح</string>
+    <string name="backstage_ringht_hour_input">الرجاء إدخال التاريخ الصحيح ساعة</string>
+    <string name="tian">لا يمكن أن يتجاوز الوقت يومين</string>
+    <string name="yue">لا يمكن أن يتجاوز الوقت شهرًا واحدًا</string>
+    <string name="yues">لا يمكن أن يتجاوز الوقت ١٢ شهرًا</string>
+    <string name="sjcw">خطأ في الوقت</string>
+    <string name="nian">لا يمكن أن يتجاوز الوقت ١٠ سنوات</string>
+    <string name="open_sleep">فتح وضع السكون</string>
+    <string name="close_sleep">إغلاق وضع السكون</string>
+    <string name="close_dev">إيقاف التشغيل</string>
+    <string name="open_dev">بدء التشغيل</string>
+    <string name="sunday">الأحد</string>
+    <string name="monday">الاثنين</string>
+    <string name="tuesday">الثلاثاء</string>
+    <string name="wednesday">الأربعاء</string>
+    <string name="thursday">الخميس</string>
+    <string name="friday">الجمعة</string>
+    <string name="saturday">السبت</string>
+    <string name="backstage_bar_chart_statistics">إحصائيات الرسم البياني الشريطي</string>
+    <string name="backstage_order_details">تفاصيل الطلب</string>
+    <string name="backstage_add_lock">إضافة منبه</string>
+    <string name="backstage_open_lock">فتح منبه محلي</string>
+
+    <string name="home_dev_id">رقم الجهاز:</string>
+    <string name="home_steam_wendu">درجة حرارة البخار</string>
+    <string name="home_login">تسجيل الدخول</string>
+    <string name="home_back_user">العودة إلى واجهة المستخدم</string>
+    <string name="home_login_tips_1">يرجى التحقق من كلمة مرور الحساب</string>
+    <string name="home_login_tips_2">تم تسجيل الدخول بنجاح</string>
+    <string name="home_tips_dialog_1">فشل اتصال الجهاز</string>
+    <string name="home_tips_dialog_2">يرجى الانتقال إلى الواجهة الخلفية لتشغيل الجهاز قبل الشراء</string>
+    <string name="home_tips_dialog_3">أصدر الجهاز إنذارًا. بعد حل المشكلة، يُرجى الانتقال إلى الواجهة الخلفية لتشغيل الجهاز قبل الشراء.</string>
+    <string name="home_tips_dialog_4">يبدأ الجهاز بالعمل، يُرجى الانتظار.</string>
+    <string name="home_tips_dialog_5">الجهاز قيد التشغيل، يُرجى الانتظار</string>
+    <string name="home_confirm">تأكيد</string>
+    <string name="home_cancle">إلغاء</string>
+    <string name="home_make_success">اكتملت العملية</string>
+    <string name="home_make_success_tips">يرجى سحب الباب السفلي لإخراج الفشار</string>
+    <string name="home_residue_s">المدة المتبقية: 40 ثانية</string>
+    <string name="home_again_buy">اشترِ مرة أخرى</string>
+    <string name="home_quit_app">انقر على زر الرجوع مرة أخرى للخروج</string>
+    <string name="home_choosepay_title">اختر طريقة الدفع الطريقة</string>
+    <string name="home_tips_dialog_6">يرجى الاتصال بالخادم قبل الاستخدام</string>
+    <string name="home_shopping_cart_null">لا توجد منتجات في سلة التسوق\nيرجى تحديد المنتجات أولاً</string>
+    <string name="alarm_message_01">الذرة لا تُفرقع</string>
+    <string name="alarm_message_02">الكوب مفقود</string>
+    <string name="alarm_message_03">ذرة مملحة مفقودة</string>
+    <string name="alarm_message_04">ذرة حلوة مفقودة</string>
+    <string name="alarm_message_05">لا ترتفع درجة الحرارة</string>
+    <string name="alarm_message_06">درجة الحرارة مرتفعة جدًا</string>
+    <string name="alarm_message_07">فشل إعادة ضبط الحاجز</string>
+    <string name="alarm_message_08">كوز ذرة عالق</string>
+    <string name="heartbeat_temp">درجة حرارة المولد</string>
+    <string name="mqtt_con_state">mqtt غير متصل بعد، يرجى الانتظار</string>
+    <string name="mdb_cash_sale">بيع نقدي من MDB</string>
+    <string name="contact_way">طريقة الاتصال</string>
+    <string name="auto_start_hotspot">تشغيل نقطة الاتصال</string>
+    <string name="name_hotspot">اسم نقطة الاتصال</string>
+    <string name="long_click_show_status_bar">إظهار شريط الحالة</string>
+    <string name="pwd_hotspot">كلمة مرور نقطة الاتصال</string>
+    <string name="mdb_rate">معدل MDB</string>
+    <string name="card_text">دليل للمستهلكين لتمرير البطاقات</string>
+    <string name="bill_trust">أوراق نقدية الثقة</string>
+    <string name="make_clean_price">مسح المبلغ بعد إتمام عملية الشراء</string>
+    <string name="ad_rule">قواعد الإعلان</string>
+    <string name="auto_return_home">إرجاع تلقائي (بالدقائق)</string>
+    <string name="sleep_text">نص نائم</string>
+    <string name="shopping_cart_size">إمكانية إضافة سلة التسوق</string>
+    <string name="two_price_discount">خصم على السلعة الثانية</string>
+    <string name="five_price_discount">خصم على السلعة الخامسة</string>
+    <string name="three_price_discount">خصم على السلعة الثالثة</string>
+    <string name="tips_discount_text">نصائح الخصم</string>
+    <string name="discount_function">دالة الخصم</string>
+    <string name="change_function">دالة التغيير</string>
+    <string name="change_bill">تغيير فاتورة</string>
+    <string name="change_coin">تغيير العملة</string>
+    <string name="change_dollar">قيمة العملة</string>
+    <string name="change_coin_rep">تغيير مخزون العملة</string>
+    <string name="change_allow_number">عدد العملات المسموح بها في المرة الواحدة</string>
+    <string name="change_warning_number">تغيير مخزون التحذيرات</string>
+    <string name="volume">الحجم</string>
+    <string name="luminance">السطوع</string>
+    <string name="logo_text">تغيير الرمز</string>
+    <string name="sim">SIM</string>
+    <string name="sim_imei">SIM_IMEI</string>
+    <string name="cut_system_set">تغيير إعدادات النظام</string>
+    <string name="contact">اسم جهة الاتصال</string>
+    <string name="wifi_hotspot">نقطة اتصال واي فاي</string>
+    <string name="staff_login">تسجيل دخول الموظفين</string>
+    <string name="backstage_operate">عملية</string>
+    <string name="coin_multiply">ضرب نبضات العملة</string>
+    <string name="coin_divide">تقسيم نبضات العملة</string>
+    <string name="not_selected">غير</string>
+    <string name="go_pay">دفع</string>
+    <string name="have_banknotes">الأوراق النقدية:</string>
+    <string name="have_coin">عملة:</string>
+    <string name="contact_message">معلومات الاتصال</string>
+    <string name="unify_price">تعديل سعر التوحيد:</string>
+    <string name="software_version">إصدار البرنامج</string>
+    <string name="body_version">إصدار النص</string>
+    <string name="name">الاسم</string>
+    <string name="show">إظهار</string>
+    <string name="hide">إخفاء</string>
+    <string name="image">صورة</string>
+    <string name="replace_picture">انقر لاستبدال صورة المنتج</string>
+    <string name="more_setup">المزيد من الإعدادات</string>
+    <string name="start_time">وقت البدء</string>
+    <string name="select_start_time">حدد وقت البدء</string>
+    <string name="select_end_time">حدد النهاية</string>
+    <string name="end_time">وقت الانتهاء</string>
+    <string name="unit">الوحدة</string>
+    <string name="time">الساعة</string>
+    <string name="date">اليوم</string>
+    <string name="month">الشهر</string>
+    <string name="year">السنة</string>
+    <string name="filter">تصفية</string>
+    <string name="clear_alarm_records">مسح سجلات الإنذار</string>
+    <string name="period">الوقت</string>
+    <string name="no_order_data">لا توجد بيانات طلب</string>
+    <string name="no_alarm_information">لا توجد معلومات إنذار</string>
+    <string name="error_events">أحداث خطأ</string>
+    <string name="rewrite">إعادة تعبئة</string>
+    <string name="open">فتح</string>
+    <string name="close">إغلاق</string>
+    <string name="turn_on_sleep">تفعيل وضع السكون</string>
+    <string name="turn_off_sleep">إيقاف وضع السكون</string>
+    <string name="device_sleep">الجهاز في وضع السكون</string>
+    <string name="contact_details">تفاصيل جهة الاتصال</string>
+    <string name="custom_name">الاسم المخصص</string>
+    <string name="no_sales_data">لا توجد بيانات مبيعات لهذه الفترة</string>
+    <string name="remark">ملاحظة</string>
+    <string name="ict_currency">عملة تكنولوجيا المعلومات والاتصالات:</string>
+    <string name="customized_payment">دفع مخصص:</string>
+    <string name="init_success">نجاح التهيئة</string>
+    <string name="init_fail">فشل التهيئة</string>
+    <string name="warn_reminder">تذكير تحذيري</string>
+    <string name="initializing">جاري التهيئة...</string>
+    <string name="second">ثاني</string>
+    <string name="delete">حذف</string>
+    <string name="clear">مسح</string>
+    <string name="shopping_cart">عربة التسوق</string>
+    <string name="total_amount">إجمالي المبلغ</string>
+    <string name="univalent">سعر الوحدة</string>
+    <string name="close_interface">إغلاق الواجهة</string>
+    <string name="modific_success">تم التعديل بنجاح</string>
+    <string name="modify">تعديل</string>
+    <string name="choose_time">اختر الوقت</string>
+    <string name="week">أسبوع</string>
+    <string name="type">النوع</string>
+</resources>

+ 1 - 1
lib_base/src/main/res/values-de/strings.xml

@@ -280,4 +280,4 @@
     <string name="choose_time">Uhrzeit auswählen</string>
     <string name="week">Woche</string>
     <string name="type">Typ</string>
-</resources>
+</resources><!--德语-->

+ 282 - 0
lib_base/src/main/res/values-fr/strings.xml

@@ -0,0 +1,282 @@
+<resources>
+    <string name="base_network_disconnected">Réseau déconnecté</string>
+    <string name="base_network_connected">Réseau connecté</string>
+
+    <string name="base_plc_debug_1">Point central secondaire 1</string>
+    <string name="base_plc_debug_2">Pompe à air basse vitesse</string>
+    <string name="base_plc_debug_3">Pompe à air moyenne vitesse</string>
+    <string name="base_plc_debug_4">Pompe à air haute vitesse</string>
+    <string name="base_plc_debug_5">Fil chauffant</string>
+    <string name="base_plc_debug_6">Moteur de maïs doux en marche avant</string>
+    <string name="base_plc_debug_7">Moteur de maïs doux en marche arrière</string>
+    <string name="base_plc_debug_8">Moteur de maïs salé en marche avant</string>
+    <string name="base_plc_debug_9">Inversion du moteur du maïs salé</string>
+    <string name="base_plc_debug_10">Moteur de descente de gobelets</string>
+    <string name="base_plc_debug_11">Déflecteur</string>
+    <string name="base_plc_debug_12">Porte de récupération des aliments</string>
+    <string name="base_plc_debug_13">Position du noyau secondaire 13</string>
+    <string name="base_plc_debug_14">Position du noyau secondaire 14</string>
+    <string name="base_plc_debug_15">Position du noyau secondaire 15</string>
+    <string name="base_plc_debug_16">Position du noyau secondaire 16</string>
+    <string name="base_plc_debug_17">Position du noyau secondaire 17</string>
+    <string name="base_plc_debug_18">Position du noyau secondaire 18</string>
+    <string name="base_plc_debug_19">Position du noyau secondaire 19</string>
+    <string name="base_plc_debug_20">Point du noyau secondaire 20</string>
+    <string name="base_plc_debug_21"></string>
+    <string name="base_plc_debug_22"></string>
+    <string name="base_plc_debug_23"></string>
+
+    <string name="base_plc_param_1">Pompe à air basse vitesse</string>
+    <string name="base_plc_param_2">Pompe à air moyenne vitesse</string>
+    <string name="base_plc_param_3">Pompe à air haute vitesse</string>
+    <string name="base_plc_param_4">Temps de vent fort</string>
+    <string name="base_plc_param_5">Temps de fermeture du déflecteur</string>
+    <string name="base_plc_param_6">Température Réglage</string>
+    <string name="base_plc_param_7">Temps de chauffe</string>
+    <string name="base_plc_param_8">Vitesse du vent pendant la production</string>
+    <string name="base_plc_param_9">Limite supérieure d\'isolation de l\'évaporateur</string>
+    <string name="base_plc_alarm_1">Le maïs n\'éclate pas</string>
+    <string name="base_plc_alarm_2">Gobelet manquant</string>
+    <string name="base_plc_alarm_3">Manque de maïs salé</string>
+    <string name="base_plc_alarm_4">Manque de maïs sucré</string>
+    <string name="base_plc_alarm_5">Aucune augmentation de température</string>
+    <string name="base_plc_alarm_6">Température trop élevée</string>
+    <string name="base_plc_alarm_7">Échec de la réinitialisation du déflecteur</string>
+    <string name="base_plc_alarm_8">Épi de maïs coincé</string>
+
+    <string name="base_pro_01">Pop-corn sucré</string>
+    <string name="base_pro_02">Pop-corn salé</string>
+    <string name="base_two_code">WeChat Alipay</string>
+    <string name="base_bill_coin">Billets et pièces</string>
+    <string name="base_nayax">Nayax</string>
+    <string name="base_mdb_no_cash">Carte de crédit MDB</string>
+    <string name="base_soepay">Soepay</string>
+    <string name="base_other1">Paramètres système</string>
+    <string name="base_other2">Paramètres du port série</string>
+    <string name="base_other3">Activation de la fonction</string>
+    <string name="base_other4">Paramètres du panier</string>
+    <string name="base_other5">Modifier les paramètres</string>
+    <string name="base_other6">Autres</string>
+    <string name="shopping_trolley">Panier</string>
+    <string name="promotion_code">Code promotionnel</string>
+    <string name="change">Modifier la fonction</string>
+    <string name="agreement">Protocole de communication</string>
+    <string name="bill_country">Sélection du billet national</string>
+    <string name="ttys_nayax">Port série Nayax</string>
+    <string name="ttys_mdb">Port série MDB</string>
+    <string name="ttys_plc">Port série PLC</string>
+    <string name="nayax_mode">Mode veille Nayax</string>
+    <string name="bill_collocation">Conservation des billets MDB</string>
+    <string name="mdb_level">Niveau L3 MDB</string>
+    <string name="base_free_pay">Production gratuite</string>
+    <string name="way_contacts">Contact:</string>
+    <string name="name_contacts">Contact:</string>
+
+    <string name="backstage_update_success">Mise à jour réussie</string>
+    <string name="backstage_data_null_tips">Données vides, impossibles à utiliser</string>
+    <string name="backstage_check_update">Vérifier les mises à jour</string>
+    <string name="backstage_system_set">Paramètres système</string>
+    <string name="backstage_setting_1">Paramètres produit</string>
+    <string name="backstage_setting_2">Ajustement des paramètres</string>
+    <string name="backstage_setting_3">Données statistiques</string>
+    <string name="backstage_setting_4">Sélecteur de langue</string>
+    <string name="backstage_setting_5">Enregistrement d\'alarme</string>
+    <string name="backstage_setting_6">Réinitialiser le mot de passe</string>
+    <string name="backstage_setting_6_1">Réinitialiser le mot de passe</string>
+    <string name="backstage_setting_7">Mise sous tension et hors tension programmées</string>
+    <string name="backstage_setting_8">Paramètres d\'autorisations</string>
+    <string name="backstage_setting_9">Autres</string>
+    <string name="backstage_setting_10">Mode de paiement</string>
+    <string name="backstage_product_1">Ajustement du prix du produit</string>
+    <string name="backstage_product_2">Paramètres des informations produit</string>
+    <string name="backstage_product_3">Modification du nom et de l\'image du produit</string>
+    <string name="backstage_product_4">Débogage du produit</string>
+    <string name="backstage_param_set_1">Page de débogage</string>
+    <string name="backstage_param_set_2">Paramètres généraux</string>
+    <string name="backstage_param_set_3">Protection des alarmes</string>
+    <string name="backstage_back">Retour</string>
+    <string name="backstage_version">Numéro de version:</string>
+    <string name="backstage_connected">Connecté:</string>
+    <string name="backstage_open_dev_tips">Voulez-vous démarrer la machine immédiatement?</string>
+    <string name="backstage_start_dev">Démarrer maintenant</string>
+    <string name="backstage_cancle">Annuler</string>
+    <string name="backstage_quit_app">Cliquez à nouveau sur la touche Retour pour quitter</string>
+    <string name="backstage_latest_version">Il s\'agit de la dernière version~</string>
+    <string name="backstage_connecting">Demande de connexion</string>
+    <string name="backstage_update_price">Confirmer l\'ajustement du prix</string>
+    <string name="backstage_connection_server">Se connecter au serveur</string>
+    <string name="backstage_connection_server_tips">Demander une connexion à distance</string>
+    <string name="backstage_connection_server_hint">Veuillez saisir l\'identifiant du système de gestion</string>
+    <string name="backstage_connection_server_btn">Postuler maintenant</string>
+    <string name="backstage_update_now">Mettre à jour maintenant</string>
+    <string name="backstage_new_version_discover">Nouvelle version trouvée:</string>
+    <string name="backstage_down_progress">Progression du téléchargement:</string>
+    <string name="backstage_old_password">Ancien mot de passe</string>
+    <string name="backstage_old_password_input">Veuillez saisir votre ancien mot de passe</string>
+    <string name="backstage_new_password">Nouveau mot de passe</string>
+    <string name="backstage_new_password_input">Veuillez saisir votre nouveau mot de passe</string>
+    <string name="backstage_confirm_password">Confirmer le mot de passe</string>
+    <string name="backstage_confirm_password_input">Veuillez saisir votre mot de passe de confirmation</string>
+    <string name="backstage_confirm">Confirmer</string>
+    <string name="backstage_update_progress_init_status">Progression du téléchargement: 0%</string>
+    <string name="backstage_update">Mettre à jour</string>
+    <string name="backstage_confirm_update">Confirmer les modifications</string>
+    <string name="backstage_ok_dialog_title">Êtes-vous sûr de vouloir effectuer cette recherche?</string>
+    <string name="backstage_search_hint">Veuillez saisir le contenu à rechercher</string>
+    <string name="backstage_steam_wendu">Température de la vapeur</string>
+    <string name="backstage_choose_time">Veuillez saisir l\'heure</string>
+    <string name="backstage_year_input">Veuillez saisir l\'année</string>
+    <string name="backstage_month_input">Veuillez saisir le mois</string>
+    <string name="backstage_day_input">Veuillez saisir le jour</string>`
+    <string name="backstage_hour_input">Veuillez saisir le heure</string>
+    <string name="backstage_ringht_month_input">Veuillez saisir le mois correct</string>
+    <string name="backstage_ringht_day_input">Veuillez saisir le jour correct</string>
+    <string name="backstage_ringht_hour_input">Veuillez saisir l\'heure correcte</string>
+    <string name="tian">La durée ne peut pas dépasser deux jours</string>
+    <string name="yue">La durée ne peut pas dépasser un mois</string>
+    <string name="yues">La durée ne peut pas dépasser 12 mois</string>
+    <string name="sjcw">Erreur de durée</string>
+    <string name="nian">La durée ne peut pas dépasser 10 ans</string>
+    <string name="open_sleep">Ouvrir le mode veille</string>
+    <string name="close_sleep">Fermer le mode veille</string>
+    <string name="close_dev">Arrêt</string>
+    <string name="open_dev">Démarrage</string>
+    <string name="sunday">Dim</string>
+    <string name="monday">Lun</string>
+    <string name="tuesday">Mar</string>
+    <string name="wednesday">Mer</string>
+    <string name="thursday">Jeu</string>
+    <string name="friday">Ven</string>
+    <string name="saturday">Sam</string>
+    <string name="backstage_bar_chart_statistics">Statistiques du graphique à barres</string>
+    <string name="backstage_order_details">Détails de la commande</string>
+    <string name="backstage_add_lock">Ajouter une alarme</string>
+    <string name="backstage_open_lock">Ouvrir une alarme locale</string>
+
+    <string name="home_dev_id">Numéro d\'appareil:</string>
+    <string name="home_steam_wendu">Température de la vapeur</string>
+    <string name="home_login">Connexion</string>
+    <string name="home_back_user">Retour à l\'interface utilisateur</string>
+    <string name="home_login_tips_1">Veuillez vérifier le mot de passe de votre compte</string>
+    <string name="home_login_tips_2">Connexion réussie</string>
+    <string name="home_tips_dialog_1">Échec de la communication avec la machine</string>
+    <string name="home_tips_dialog_2">Veuillez accéder au backend pour allumer la machine avant d\'acheter</string>
+    <string name="home_tips_dialog_3">La machine a déclenché une alarme. Après avoir résolu le problème, veuillez accéder au backend pour allumer la machine avant d\'acheter</string>
+    <string name="home_tips_dialog_4">La machine démarre, veuillez patienter</string>
+    <string name="home_tips_dialog_5">La machine est en cours de fabrication, veuillez patienter</string>
+    <string name="home_confirm">Confirmer</string>
+    <string name="home_cancle">Annuler</string>
+    <string name="home_make_success">Fabrication terminée</string>
+    <string name="home_make_success_tips">Veuillez tirer la porte inférieure pour prendre le pop-corn</string>
+    <string name="home_residue_s">40 secondes restantes</string>
+    <string name="home_again_buy">Acheter à nouveau</string>
+    <string name="home_quit_app">Cliquez à nouveau sur la touche Retour pour quitter</string>
+    <string name="home_choosepay_title">Sélectionner le mode de paiement</string>
+    <string name="home_tips_dialog_6">Veuillez vous connecter au serveur avant d\'utiliser</string>
+    <string name="home_shopping_cart_null">Aucun article dans le panier\nVeuillez d\'abord sélectionner les articles</string>
+    <string name="alarm_message_01">Le maïs n\'éclate pas</string>
+    <string name="alarm_message_02">Gobelet manquant</string>
+    <string name="alarm_message_03">Manque de maïs salé</string>
+    <string name="alarm_message_04">Manque de maïs sucré</string>
+    <string name="alarm_message_05">Aucune température Augmentation</string>
+    <string name="alarm_message_06">Température trop élevée</string>
+    <string name="alarm_message_07">Échec de la réinitialisation du déflecteur</string>
+    <string name="alarm_message_08">Épis de maïs coincé</string>
+    <string name="heartbeat_temp">Température du générateur</string>
+    <string name="mqtt_con_state">Le mqtt n\'est pas encore connecté, veuillez patienter</string>
+    <string name="mdb_cash_sale">Vente au comptant MDB</string>
+    <string name="contact_way">Mode de contact</string>
+    <string name="auto_start_hotspot">Démarrer le point d\'accès</string>
+    <string name="name_hotspot">Nom du point d\'accès</string>
+    <string name="long_click_show_status_bar">Afficher la barre d\'état</string>
+    <string name="pwd_hotspot">Mot de passe du point d\'accès</string>
+    <string name="mdb_rate">MDB taux</string>
+    <string name="card_text">Guide pour les consommateurs sur le paiement par carte</string>
+    <string name="bill_trust">Fiducie de billets</string>
+    <string name="make_clean_price">Valider le montant après paiement</string>
+    <string name="ad_rule">Règles publicitaires</string>
+    <string name="auto_return_home">Retour automatique (minutes)</string>
+    <string name="sleep_text">Texte de mise en veille</string>
+    <string name="shopping_cart_size">Ajout possible au panier</string>
+    <string name="two_price_discount">Remise sur le deuxième article</string>
+    <string name="five_price_discount">Remise sur le cinquième article</string>
+    <string name="three_price_discount">Remise sur le troisième article</string>
+    <string name="tips_discount_text">Conseils sur les remises</string>
+    <string name="discount_function">Fonction de remise</string>
+    <string name="change_function">Fonction de modification</string>
+    <string name="change_bill">Changer un billet</string>
+    <string name="change_coin">Changer une pièce</string>
+    <string name="change_dollar">Montant d\'une pièce</string>
+    <string name="change_coin_rep">Inventaire des pièces</string>
+    <string name="change_allow_number">Nombre de monnaies autorisées simultanément</string>
+    <string name="change_warning_number">Avertissement de changement d\'inventaire</string>
+    <string name="volume">Volume</string>
+    <string name="luminance">Luminosité</string>
+    <string name="logo_text">Changer d\'icône</string>
+    <string name="sim">SIM</string>
+    <string name="sim_imei">SIM_IMEI</string>
+    <string name="cut_system_set">Changer les paramètres système</string>
+    <string name="contact">Nom du contact</string>
+    <string name="wifi_hotspot">Point d\'accès Wi-Fi</string>
+    <string name="staff_login">Connexion du personnel</string>
+    <string name="backstage_operate">Opération</string>
+    <string name="coin_multiply">Multiplication d\'impulsions de pièces</string>
+    <string name="coin_divide">Division d\'impulsions de pièces</string>
+    <string name="not_selected">Non</string>
+    <string name="go_pay">Pay</string>
+    <string name="have_banknotes">Billets \ninsérés:</string>
+    <string name="have_coin">Pièce \ninsérée:</string>
+    <string name="contact_message">Coordonnées</string>
+    <string name="unify_price">Modification de prix unifiée:</string>
+    <string name="software_version">Version du logiciel</string>
+    <string name="body_version">Version du corps</string>
+    <string name="name">Nom</string>
+    <string name="show">Afficher</string>
+    <string name="hide">Masquer</string>
+    <string name="image">Image</string>
+    <string name="replace_picture">Cliquez pour remplacer le produit image</string>
+    <string name="more_setup">Plus de paramètres</string>
+    <string name="start_time">Heure de début</string>
+    <string name="select_start_time">Sélectionner le début</string>
+    <string name="select_end_time">Sélectionner la fin</string>
+    <string name="end_time">Heure de fin</string>
+    <string name="unit">Unité</string>
+    <string name="time">Heure</string>
+    <string name="date">Jour</string>
+    <string name="month">Mois</string>
+    <string name="year">Année</string>
+    <string name="filter">Filtre</string>
+    <string name="clear_alarm_records">Effacer les enregistrements d\'alarme</string>
+    <string name="period">Heure</string>
+    <string name="no_order_data">Aucune donnée de commande</string>
+    <string name="no_alarm_information">Aucune information d\'alarme</string>
+    <string name="error_events">Événements d\'erreur</string>
+    <string name="rewrite">Remplir</string>
+    <string name="open">Ouvrir</string>
+    <string name="close">Fermer</string>
+    <string name="turn_on_sleep">Activer la mise en veille</string>
+    <string name="turn_off_sleep">Désactiver la mise en veille</string>
+    <string name="device_sleep">Appareil en veille</string>
+    <string name="contact_details">Coordonnées</string>
+    <string name="custom_name">Nom personnalisé</string>
+    <string name="no_sales_data">Aucune donnée de vente n\'est disponible pour cette période</string>
+    <string name="remark">Remarque</string>
+    <string name="ict_currency">Devise TIC:</string>
+    <string name="customized_payment">Paiement personnalisé:</string>
+    <string name="init_success">Initialisation réussie</string>
+    <string name="init_fail">Échec de l\'initialisation</string>
+    <string name="warn_reminder">Rappel d\'avertissement</string>
+    <string name="initializing">Initialisation en cours…</string>
+    <string name="second">Deuxième</string>
+    <string name="delete">Supprimer</string>
+    <string name="clear">Effacer</string>
+    <string name="shopping_cart">Panier</string>
+    <string name="total_amount">Montant total</string>
+    <string name="univalent">Prix unitaire</string>
+    <string name="close_interface">Fermer l\'interface</string>
+    <string name="modific_success">Modification réussie</string>
+    <string name="modify">Modifier</string>
+    <string name="choose_time">Choisir l\'heure</string>
+    <string name="week">Semaine</string>
+    <string name="type">Type</string>
+</resources><!--法语-->

+ 2 - 0
lib_base/src/main/res/values/strings.xml

@@ -280,6 +280,8 @@
     <string name="choose_time">选择时间</string>
     <string name="week">星期</string>
     <string name="type">类型</string>
+    <string name="system_setting">进入系统设置</string>
+    <string name="make_faild">制作失败,请重新开机</string>
 
 </resources>
 <!--中文-->

+ 1 - 0
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/constant/MqName.kt

@@ -24,4 +24,5 @@ object MqName {
     var initialization= "initialization"//机器崩溃要重新启动
     var updatePrice = "updatePrice"//MQtt修改价格
     var log = "log"//上传log到服务器
+    var updateApk = "updateApk"//上传log到服务器
 }

+ 1 - 4
lib_common/src/main/java/com/quyunshuo/androidbaseframemvvm/common/ui/BaseActivity.kt

@@ -1,5 +1,6 @@
 package com.quyunshuo.androidbaseframemvvm.common.ui
 
+import android.content.Context
 import android.os.Bundle
 import android.util.Log
 import androidx.viewbinding.ViewBinding
@@ -8,8 +9,6 @@ import com.quyunshuo.androidbaseframemvvm.base.mvvm.vm.BaseViewModel
 import com.quyunshuo.androidbaseframemvvm.base.utils.ActivityStackManager
 import com.quyunshuo.androidbaseframemvvm.base.utils.AndroidBugFixUtils
 import com.quyunshuo.androidbaseframemvvm.base.utils.BarUtils
-import com.quyunshuo.androidbaseframemvvm.common.R
-import com.quyunshuo.androidbaseframemvvm.common.keyboard.KeyUtils
 import com.quyunshuo.androidbaseframemvvm.common.keyboard.KeyboardView
 
 /**
@@ -24,7 +23,6 @@ abstract class BaseActivity<VB : ViewBinding, VM : BaseViewModel> : BaseFrameAct
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-
     }
 
     /**
@@ -48,5 +46,4 @@ abstract class BaseActivity<VB : ViewBinding, VM : BaseViewModel> : BaseFrameAct
         AndroidBugFixUtils().fixSoftInputLeaks(this)
     }
 
-
 }

+ 3 - 2
module_backstage/src/main/AndroidManifest.xml

@@ -1,8 +1,9 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android">
-<!-- android:theme="@style/SplashTeme"-->
+    <!-- android:theme="@style/SplashTeme"-->
     <application>
-        <activity android:name=".activity.setting.SettingActivity"
+        <activity
+            android:name=".activity.setting.SettingActivity"
             android:exported="true">
 <!--            <intent-filter>-->
 <!--                <action android:name="android.intent.action.MAIN" />-->

+ 5 - 6
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt

@@ -3,7 +3,6 @@ package com.module.backstage.activity.setting
 import android.annotation.SuppressLint
 import android.app.XzjhSystemManager
 import android.content.Context
-import android.content.res.Configuration
 import android.content.res.Resources
 import android.graphics.Color
 import android.os.Build
@@ -56,9 +55,8 @@ import com.quyunshuo.androidbaseframemvvm.common.constant.event.ApiMessageEvent
 import com.quyunshuo.androidbaseframemvvm.common.enums.ConnectStateEnum
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseActivity
 import com.quyunshuo.androidbaseframemvvm.common.util.FileUtil
-import com.quyunshuo.androidbaseframemvvm.common.util.LanguageUtil
+import com.quyunshuo.androidbaseframemvvm.base.utils.LanguageUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.LongClickUtils
-import com.quyunshuo.androidbaseframemvvm.common.util.MyContextWrapper
 import com.quyunshuo.androidbaseframemvvm.common.util.ToastUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
@@ -106,6 +104,7 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
     @RequiresApi(Build.VERSION_CODES.O)
     @SuppressLint("ResourceType")
     override fun BackstageActivitySettingBinding.initView() {
+        window.decorView.layoutDirection = View.LAYOUT_DIRECTION_LTR
         LanguageUtil.setLanguage();
         // 设置布局延伸到状态栏和导航栏下方
         window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
@@ -474,9 +473,9 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
             }).start()
     }
 
-    override fun attachBaseContext(newBase: Context?) {
-        super.attachBaseContext(MyContextWrapper.wrap(newBase!!, LanguageUtil.setLanguage()))
-    }
+//    override fun attachBaseContext(newBase: Context?) {
+//        super.attachBaseContext(MyContextWrapper.wrap(newBase!!, LanguageUtil.setLanguage()))
+//    }
 
     /**
      * 哪些item要显示

+ 61 - 59
module_backstage/src/main/java/com/module/backstage/adapter/TestAdapter.kt

@@ -153,7 +153,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                                 return@setOnClickListener
                             }
                             SpUtils.putString(item.mmkvName, value)
-                            ToastUtil.switchToastStyleToSuccess("更新成功:" + item.mmkvName)
+                            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                         }
 //                btnUpdate.setOnClickListener {
 //                    itemListener?.onClickListener(it,layoutPosition,etValue.text.trim().toString())
@@ -177,7 +177,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                         initSpinner(this, item)
                         btnUpdate.setOnClickListener {
                             SpUtils.putInt(item.mmkvName, this@TestAdapter.type3Position)
-                            ToastUtil.switchToastStyleToSuccess("更新成功:" + item.mmkvName)
+                            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                         }
                     }
                 }
@@ -233,75 +233,77 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
 
                 override fun onBind(holder: SliderVH, position: Int, item: OtherEnum?) {
                     // 绑定 item 数据
-                    val mManager = context.getSystemService("xzjh_server") as XzjhSystemManager
-                    val audioManager =
-                        context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
-
-                    itemListener?.onClickListener(holder.itemView, position, null)
-                    holder.viewBinding.run {
-                        tvName.text = UiUtil.getStringRes(item!!.nameId)
-                        when (item.mmkvName) {
-                            MMKVName.VOLUME -> {
-                                XLogUtil.d(
-                                    "音量:" + audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + ":" + audioManager.getStreamVolume(
-                                        AudioManager.STREAM_MUSIC
+                    if (context.getSystemService("xzjh_server") != null) {
+                        val mManager = context.getSystemService("xzjh_server") as XzjhSystemManager
+                        val audioManager =
+                            context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
+
+                        itemListener?.onClickListener(holder.itemView, position, null)
+                        holder.viewBinding.run {
+                            tvName.text = UiUtil.getStringRes(item!!.nameId)
+                            when (item.mmkvName) {
+                                MMKVName.VOLUME -> {
+                                    XLogUtil.d(
+                                        "音量:" + audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC) + ":" + audioManager.getStreamVolume(
+                                            AudioManager.STREAM_MUSIC
+                                        )
                                     )
-                                )
-                                sbLight.max =
-                                    audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
-                                sbLight.progress =
-                                    audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
-                            }
-
-                            MMKVName.LUMINANCE -> {
-                                XLogUtil.d("亮度:" + ZtlManager.GetInstance().systemMaxBrightness + ":" + mManager.xzjhGetBacklight())
-                                sbLight.max =
-                                    ZtlManager.GetInstance().systemMaxBrightness //maxBrightness 为 Android 系统最大亮度
-                                sbLight.progress = mManager.xzjhGetBacklight()
-                            }
-                        }
+                                    sbLight.max =
+                                        audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)
+                                    sbLight.progress =
+                                        audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)
+                                }
 
-                        sbLight.setOnSeekBarChangeListener(object :
-                            SeekBar.OnSeekBarChangeListener {
-                            override fun onProgressChanged(
-                                seekBar: SeekBar?,
-                                progress: Int,
-                                fromUser: Boolean,
-                            ) {
-                                //设置进度
-                                setPro(seekBar, progress);
+                                MMKVName.LUMINANCE -> {
+                                    XLogUtil.d("亮度:" + ZtlManager.GetInstance().systemMaxBrightness + ":" + mManager.xzjhGetBacklight())
+                                    sbLight.max =
+                                        ZtlManager.GetInstance().systemMaxBrightness //maxBrightness 为 Android 系统最大亮度
+                                    sbLight.progress = mManager.xzjhGetBacklight()
+                                }
                             }
 
-                            private fun setPro(seekBar: SeekBar?, progress: Int) {
-                                when (item.mmkvName) {
-                                    MMKVName.VOLUME -> {
-                                        //设置 Android 系统媒体音量值为 10
-                                        audioManager.setStreamVolume(
-                                            AudioManager.STREAM_MUSIC,
-                                            progress,
-                                            AudioManager.FLAG_SHOW_UI
-                                        )
-                                    }
+                            sbLight.setOnSeekBarChangeListener(object :
+                                SeekBar.OnSeekBarChangeListener {
+                                override fun onProgressChanged(
+                                    seekBar: SeekBar?,
+                                    progress: Int,
+                                    fromUser: Boolean,
+                                ) {
+                                    //设置进度
+                                    setPro(seekBar, progress);
+                                }
 
-                                    MMKVName.LUMINANCE -> {
-                                        //设置 Android 系统亮度为 200
-                                        mManager.xzjhSetBacklight(progress);
+                                private fun setPro(seekBar: SeekBar?, progress: Int) {
+                                    when (item.mmkvName) {
+                                        MMKVName.VOLUME -> {
+                                            //设置 Android 系统媒体音量值为 10
+                                            audioManager.setStreamVolume(
+                                                AudioManager.STREAM_MUSIC,
+                                                progress,
+                                                AudioManager.FLAG_SHOW_UI
+                                            )
+                                        }
+
+                                        MMKVName.LUMINANCE -> {
+                                            //设置 Android 系统亮度为 200
+                                            mManager.xzjhSetBacklight(progress);
+                                        }
                                     }
                                 }
-                            }
 
-                            override fun onStartTrackingTouch(seekBar: SeekBar?) {
+                                override fun onStartTrackingTouch(seekBar: SeekBar?) {
 
-                            }
+                                }
 
-                            override fun onStopTrackingTouch(seekBar: SeekBar?) {
-                            }
+                                override fun onStopTrackingTouch(seekBar: SeekBar?) {
+                                }
 
-                        });
+                            });
+                        }
                     }
-
                 }
 
+
                 override fun isFullSpanItem(itemType: Int): Boolean {
                     // 使用GridLayoutManager时,此类型的 item 是否是满跨度
                     return true;
@@ -391,7 +393,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                                     Intent(Settings.ACTION_SETTINGS),
                                     null
                                 )
-                                ToastUtil.switchToastStyleToSuccess("打开系统设置界面")
+                                ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.system_setting))
                             }
                         }
                     }
@@ -431,7 +433,7 @@ class TestAdapter(var productList: MutableList<OtherEnum>) :
                                 return@setOnClickListener
                             }
                             SpUtils.putString(item.mmkvName, value)
-                            ToastUtil.switchToastStyleToSuccess("更新成功:" + item.mmkvName)
+                            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success) + item.mmkvName)
                         }
                     }
                 }

+ 44 - 43
module_backstage/src/main/java/com/module/backstage/fragment/LanguageFragment.kt

@@ -6,7 +6,7 @@ import androidx.fragment.app.viewModels
 import com.module.backstage.R
 import com.module.backstage.databinding.BackstageFragmentLanguageBinding
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
-import com.quyunshuo.androidbaseframemvvm.common.util.LanguageUtil
+import com.quyunshuo.androidbaseframemvvm.base.utils.LanguageUtil
 import com.module.backstage.vm.LanguageFragmentVM
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
@@ -27,19 +27,20 @@ class LanguageFragment : BaseFragment<BackstageFragmentLanguageBinding, Language
     var languageType: Int = 1 //默认选择的
     var languageValue: String = LanguageUtil.CHINESE
 
+    private  val TAG = "LanguageFragment"
     override val mViewModel: LanguageFragmentVM by viewModels()
     override fun createVB() = BackstageFragmentLanguageBinding.inflate(layoutInflater)
 
 
     override fun BackstageFragmentLanguageBinding.initView() {
-        languageType = SpUtils.getInt(MMKVName.LANGUAGE_TYPE, 1)!!
+        languageType = SpUtils.getInt(MMKVName.LANGUAGE_TYPE, 0)!!
         mViewModel.setSelectLanguage(mBinding,languageType)
 
         flLanguage.setOnCheckedChangeListener(this@LanguageFragment)
         btnOk.setOnClickListener{
-            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.backstage_update_success))
-            SpUtils.putInt(MMKVName.LANGUAGE_TYPE,languageType)
+            SpUtils.putInt(MMKVName.LANGUAGE_TYPE, languageType)
             set(languageValue)
+            ToastUtil.switchToastStyleToSuccess(UiUtil.getStringRes(R.string.modific_success))
         }
     }
     override fun initObserve() {
@@ -53,159 +54,159 @@ class LanguageFragment : BaseFragment<BackstageFragmentLanguageBinding, Language
     override fun onCheckedChanged(group: RadioGroup?, checkedId: Int) {
         when (checkedId) {
             R.id.rb_chinese -> {
-                languageType = 1
+                languageType = 0
                 languageValue = LanguageUtil.CHINESE
             }
             R.id.rb_english -> {
-                languageType = 2
+                languageType = 1
                 languageValue = LanguageUtil.ENGLISH
             }
             R.id.rb_german -> {
-                languageType = 3
+                languageType = 2
                 languageValue = LanguageUtil.GERMAN
             }
             R.id.rb_russia -> {
-                languageType = 4
+                languageType = 3
                 languageValue = LanguageUtil.RUSSIA
             }
             R.id.rb_japanese -> {
-                languageType = 5
+                languageType = 4
                 languageValue = LanguageUtil.JAPANESE
             }
             R.id.rb_Spanish -> {
-                languageType = 6
+                languageType = 5
                 languageValue = LanguageUtil.SPANISH
             }
             R.id.rb_french -> {
-                languageType = 7
+                languageType = 6
                 languageValue = LanguageUtil.FRENCH
             }
             R.id.rb_bulgaria -> {
-                languageType = 8
+                languageType = 7
                 languageValue = LanguageUtil.BULGARIA
             }
             R.id.rb_danmai -> {
-                languageType = 9
+                languageType = 8
                 languageValue = LanguageUtil.DanMai
             }
             R.id.rb_fenlan -> {
-                languageType = 10
+                languageType = 9
                 languageValue = LanguageUtil.FenLan
             }
             R.id.rb_helan -> {
-                languageType = 11
+                languageType = 10
                 languageValue = LanguageUtil.HeLan
             }
             R.id.rb_jieke -> {
-                languageType = 12
+                languageType = 11
                 languageValue = LanguageUtil.JieKe
             }
             R.id.rb_luomaniya -> {
-                languageType = 13
+                languageType = 12
                 languageValue = LanguageUtil.RouMaNiYa
             }
             R.id.rb_nuowei -> {
-                languageType = 14
+                languageType = 13
                 languageValue = LanguageUtil.NuoWei
             }
             R.id.rb_putaoya -> {
-                languageType = 15
+                languageType = 14
                 languageValue = LanguageUtil.PuTaoYa
             }
             R.id.rb_ruishi -> {
-                languageType = 16
+                languageType = 15
                 languageValue = LanguageUtil.RuiShi
             }
             R.id.rb_sifaluoke -> {
-                languageType = 17
+                languageType = 16
                 languageValue = LanguageUtil.SiFaLuoKe
             }
             R.id.rb_xiongyali -> {
-                languageType = 18
+                languageType = 17
                 languageValue = LanguageUtil.XiongYaLi
             }
             R.id.rb_yidali -> {
-                languageType = 19
+                languageType = 18
                 languageValue = LanguageUtil.YiDaLi
             }
             R.id.rb_taiwang -> {
-                languageType = 20
+                languageType = 19
                 languageValue = LanguageUtil.TaiWang
             }
             R.id.rb_hany -> {
-                languageType = 21
+                languageType = 20
                 languageValue = LanguageUtil.hangguo
             }
             R.id.rb_bolan -> {
-                languageType = 22
+                languageType = 21
                 languageValue = LanguageUtil.bolan
             }
             R.id.rb_wukelan -> {
-                languageType = 23
+                languageType = 22
                 languageValue = LanguageUtil.wukelan
             }
             R.id.rb_ymny -> {
-                languageType = 24
+                languageType = 23
                 languageValue = LanguageUtil.ymny
             }
             R.id.rb_alb -> {
-                languageType = 25
+                languageType = 24
                 languageValue = LanguageUtil.alb
             }
             R.id.rb_tg -> {
-                languageType = 26
+                languageType = 25
                 languageValue = LanguageUtil.tg
             }
             R.id.rb_ysl -> {
-                languageType = 27
+                languageType = 26
                 languageValue = LanguageUtil.ysl
             }
             R.id.rb_brazil2 -> {
-                languageType = 28
+                languageType = 27
                 languageValue = LanguageUtil.brazil
             }
             R.id.rb_gljy -> {
-                languageType = 29
+                languageType = 28
                 languageValue = LanguageUtil.gljy
             }
             R.id.rb_brazil3 -> {
-                languageType = 30
+                languageType = 29
                 languageValue = LanguageUtil.brazi2
             }
             R.id.rb_turkey -> {
-                languageType = 31
+                languageType = 30
                 languageValue = LanguageUtil.turkey
             }
             R.id.rb_latvia -> {
-                languageType = 32
+                languageType = 31
                 languageValue = LanguageUtil.latvia
             }
             R.id.rb_portugal_ra -> {
-                languageType = 33
+                languageType = 32
                 languageValue = LanguageUtil.ricardoAmaro
             }
             R.id.rb_eesti -> {
-                languageType = 34
+                languageType = 33
                 languageValue = LanguageUtil.eesti
             }
             R.id.rb_mgy -> {
-                languageType = 35
+                languageType = 34
                 languageValue = LanguageUtil.mgy
             }
             R.id.rb_bsy -> {
-                languageType = 36
+                languageType = 35
                 languageValue = LanguageUtil.bsy
             }
             R.id.rb_slwny -> {
-                languageType = 37
+                languageType = 36
                 languageValue = LanguageUtil.slwny
             }
             R.id.rb_kldy -> {
-                languageType = 38
+                languageType = 37
                 languageValue = LanguageUtil.kldy
             }
             R.id.rb_bsny -> {
-                languageType = 39
+                languageType = 38
                 languageValue = LanguageUtil.bsny
             }
             else -> {

+ 3 - 1
module_backstage/src/main/java/com/module/backstage/fragment/product/DebugProductFragment.kt

@@ -10,6 +10,7 @@ import com.hboxs.serialport.sbc.VBoxMessage
 import com.hboxs.serialport.sbc.VboxSerialPortSendQueue
 import com.hboxs.serialport.sbc.frame.VboxCommand
 import com.hboxs.serialport.sbc.frame.VboxWriteCommand
+import com.module.backstage.R
 import com.module.backstage.adapter.DebugProductAdapter
 import com.module.backstage.databinding.BackstageFragmentDebugProductBinding
 import com.module.backstage.dialog.OKCancelDialog
@@ -19,6 +20,7 @@ import com.quyunshuo.androidbaseframemvvm.common.listener.AdapterClickListener
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
 import com.quyunshuo.androidbaseframemvvm.common.util.ByteUtils
 import com.quyunshuo.androidbaseframemvvm.common.util.ToastUtil
+import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
 import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.CoroutineScope
@@ -67,7 +69,7 @@ class DebugProductFragment :
                     when(deviceState){
                         "02"->showOkCancelDialog(position)
                         else->{
-                            ToastUtil.switchToastStyleToError("当前状态无法进行制作\n请重新开机后,再做尝试。")
+                            ToastUtil.switchToastStyleToError(UiUtil.getStringRes(R.string.make_faild)+":"+deviceState)
                             return
                         }
                     }

+ 39 - 41
module_backstage/src/main/java/com/module/backstage/vm/LanguageFragmentVM.kt

@@ -1,11 +1,9 @@
 package com.module.backstage.vm
 
 import androidx.lifecycle.MutableLiveData
-import com.module.backstage.R
 import com.module.backstage.databinding.BackstageFragmentLanguageBinding
 import com.module.backstage.repo.LanguageFragmentRepo
 import com.quyunshuo.androidbaseframemvvm.base.mvvm.vm.BaseViewModel
-import com.quyunshuo.androidbaseframemvvm.common.util.LanguageUtil
 import dagger.hilt.android.lifecycle.HiltViewModel
 import javax.inject.Inject
 
@@ -51,159 +49,159 @@ class LanguageFragmentVM @Inject constructor(private val mRepo: LanguageFragment
 
     fun setSelectLanguage(mBinding: BackstageFragmentLanguageBinding, languageType: Int) {
         when (languageType) {
-            1 -> {
+            0 -> {
                 mBinding.flLanguage.check(mBinding.rbChinese.id)
             }
 
-            2 -> {
+            1 -> {
                 mBinding.flLanguage.check(mBinding.rbEnglish.id)
             }
 
-            3 -> {
+            2 -> {
                 mBinding.flLanguage.check(mBinding.rbGerman.id)
             }
 
-            4 -> {
+            3 -> {
                 mBinding.flLanguage.check(mBinding.rbRussia.id)
             }
 
-            5 -> {
+            4 -> {
                 mBinding.flLanguage.check(mBinding.rbJapanese.id)
             }
 
-            6 -> {
+            5 -> {
                 mBinding.flLanguage.check(mBinding.rbSpanish.id)
             }
 
-            7 -> {
+            6 -> {
                 mBinding.flLanguage.check(mBinding.rbFrench.id)
             }
 
-            8 -> {
+            7 -> {
                 mBinding.flLanguage.check(mBinding.rbBulgaria.id)
             }
 
-            9 -> {
+            8 -> {
                 mBinding.flLanguage.check(mBinding.rbDanmai.id)
             }
 
-            10 -> {
+            9 -> {
                 mBinding.flLanguage.check(mBinding.rbFenlan.id)
             }
 
-            11 -> {
+            10 -> {
                 mBinding.flLanguage.check(mBinding.rbHelan.id)
             }
 
-            12 -> {
+            11 -> {
                 mBinding.flLanguage.check(mBinding.rbJieke.id)
             }
 
-            13 -> {
+            12 -> {
                 mBinding.flLanguage.check(mBinding.rbLuomaniya.id)
             }
 
-            14 -> {
+            13 -> {
                 mBinding.flLanguage.check(mBinding.rbNuowei.id)
             }
 
-            15 -> {
+            14 -> {
                 mBinding.flLanguage.check(mBinding.rbPutaoya.id)
             }
 
-            16 -> {
+            15 -> {
                 mBinding.flLanguage.check(mBinding.rbRuishi.id)
             }
 
-            17 -> {
+            16 -> {
                 mBinding.flLanguage.check(mBinding.rbSifaluoke.id)
             }
 
-            18 -> {
+            17 -> {
                 mBinding.flLanguage.check(mBinding.rbXiongyali.id)
             }
 
-            19 -> {
+            18 -> {
                 mBinding.flLanguage.check(mBinding.rbYidali.id)
             }
 
-            20 -> {
+            19 -> {
                 mBinding.flLanguage.check(mBinding.rbTaiwang.id)
             }
 
-            21 -> {
+            20 -> {
                 mBinding.flLanguage.check(mBinding.rbHany.id)
             }
 
-            22 -> {
+            21 -> {
                 mBinding.flLanguage.check(mBinding.rbBolan.id)
             }
 
-            23 -> {
+            22 -> {
                 mBinding.flLanguage.check(mBinding.rbWukelan.id)
             }
 
-            24 -> {
+            23 -> {
                 mBinding.flLanguage.check(mBinding.rbYsl.id)
             }
 
-            25 -> {
+            24 -> {
                 mBinding.flLanguage.check(mBinding.rbAlb.id)
             }
 
-            26 -> {
+            25 -> {
                 mBinding.flLanguage.check(mBinding.rbTg.id)
             }
 
-            27 -> {
+            26 -> {
                 mBinding.flLanguage.check(mBinding.rbYsl.id)
             }
 
-            28 -> {
+            27 -> {
                 mBinding.flLanguage.check(mBinding.rbBrazil2.id)
             }
 
-            29 -> {
+            28 -> {
                 mBinding.flLanguage.check(mBinding.rbGljy.id)
             }
 
-            30 -> {
+            29 -> {
                 mBinding.flLanguage.check(mBinding.rbBrazil3.id)
             }
 
-            31 -> {
+            30 -> {
                 mBinding.flLanguage.check(mBinding.rbTurkey.id)
             }
 
-            32 -> {
+            31 -> {
                 mBinding.flLanguage.check(mBinding.rbLatvia.id)
             }
 
-            33 -> {
+            32 -> {
                 mBinding.flLanguage.check(mBinding.rbPortugalRa.id)
             }
 
-            34 -> {
+            33 -> {
                 mBinding.flLanguage.check(mBinding.rbEesti.id)
             }
 
-            35 -> {
+            34 -> {
                 mBinding.flLanguage.check(mBinding.rbMgy.id)
             }
 
-            36 -> {
+            35 -> {
                 mBinding.flLanguage.check(mBinding.rbBsny.id)
             }
 
-            37 -> {
+            36 -> {
                 mBinding.flLanguage.check(mBinding.rbSlwny.id)
             }
 
-            38 -> {
+            37 -> {
                 mBinding.flLanguage.check(mBinding.rbKldy.id)
             }
 
-            39 -> {
+            38 -> {
                 mBinding.flLanguage.check(mBinding.rbBsny.id)
             }
 

+ 3 - 10
module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt

@@ -1,7 +1,7 @@
 package com.quyunshuo.module.home.activity.main
 
-import android.content.Context
 import android.util.Log
+import android.view.View
 import android.widget.Toast
 import androidx.activity.viewModels
 import androidx.lifecycle.LifecycleObserver
@@ -15,8 +15,7 @@ import com.quyunshuo.androidbaseframemvvm.common.constant.MqName
 import com.quyunshuo.androidbaseframemvvm.common.constant.RouteUrl
 import com.quyunshuo.androidbaseframemvvm.common.constant.event.ApiMessageEvent
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseActivity
-import com.quyunshuo.androidbaseframemvvm.common.util.LanguageUtil
-import com.quyunshuo.androidbaseframemvvm.common.util.MyContextWrapper
+import com.quyunshuo.androidbaseframemvvm.base.utils.LanguageUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.databinding.HomeActivityMainBinding
@@ -24,7 +23,6 @@ import com.quyunshuo.module.home.utils.GeTuiUtil
 import dagger.hilt.android.AndroidEntryPoint
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
-import java.io.File
 
 
 /**
@@ -46,8 +44,8 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>(),Life
     override val mViewModel by viewModels<MainViewModel>()
 
     override fun createVB() = HomeActivityMainBinding.inflate(layoutInflater)
-
     override fun HomeActivityMainBinding.initView() {
+        window.decorView.layoutDirection = View.LAYOUT_DIRECTION_LTR
         LanguageUtil.setLanguage()
         mViewModel.initProductData()
         GeTuiUtil(this@MainActivity).geTui()
@@ -124,11 +122,6 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>(),Life
         Log.d(TAG, "onStop: ")
     }
 
-
-    override fun attachBaseContext(newBase: Context?) {
-        super.attachBaseContext(MyContextWrapper.wrap(newBase!!, LanguageUtil.setLanguage()))
-    }
-
     @Subscribe(threadMode = ThreadMode.MAIN)
     fun event(message: ApiMessageEvent) {
         when (message.name) {

+ 1 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt

@@ -100,7 +100,7 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
         enumByValue?.navId?.let { ivLogo.setImageResource(it) }
         enumByValue?.width?.let { layoutParams.width = it }
         enumByValue?.height?.let { layoutParams.height = it }
-        if (SpUtils.getInt(MMKVName.LANGUAGE_TYPE,1)!=1){
+        if (SpUtils.getInt(MMKVName.LANGUAGE_TYPE,0)!=0){
             ivBuyIcon.setImageResource(R.drawable.btn_goumai_yy)
         }
     }

+ 94 - 1
module_home/src/main/java/com/quyunshuo/module/home/utils/RemotePushUtil.kt

@@ -1,12 +1,16 @@
 package com.quyunshuo.module.home.utils
 
+import android.app.XzjhSystemManager
 import android.content.Context
 import android.media.AudioManager
+import android.media.MediaScannerConnection
+import android.os.Environment
 import android.util.Log
 import com.google.gson.Gson
 import com.hboxs.serialport.plc.message.Message
 import com.hboxs.serialport.plc.thread.ThreadSettingParam
 import com.quyunshuo.androidbaseframemvvm.base.BaseApplication
+import com.quyunshuo.androidbaseframemvvm.base.BaseApplication.Companion.context
 import com.quyunshuo.androidbaseframemvvm.base.addressenum.PlcSettingAddressEnum
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.bean.PaySucessBean
@@ -27,6 +31,11 @@ import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.launch
+import okhttp3.Call
+import okhttp3.Callback
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import okhttp3.Response
 import org.greenrobot.eventbus.EventBus
 import org.greenrobot.eventbus.Subscribe
 import org.greenrobot.eventbus.ThreadMode
@@ -34,6 +43,7 @@ import java.io.ByteArrayOutputStream
 import java.io.DataInputStream
 import java.io.File
 import java.io.FileInputStream
+import java.io.FileOutputStream
 import java.io.IOException
 import java.io.InputStream
 import java.io.OutputStream
@@ -167,11 +177,94 @@ class RemotePushUtil @Inject constructor() {
                 //远程上传日志文件
                 uploadLogApi(baseBean.kind_data)
             }
-
+            MqName.updateApk -> {
+                //远程推送apk或图片
+                upDateApk(baseBean.kind_data)
+            }
             else -> {}
         }
     }
 
+
+    /**
+     * 远程推送apk或图片
+     *
+     * @param kindData
+     */
+    fun upDateApk(kindData: String) {
+        var str1 = ""
+        val targetString = ".com.cn/"
+        var startIndex: Int = kindData.indexOf(targetString)
+        var result =""
+        if (startIndex != -1) {
+            startIndex += targetString.length
+            result = kindData.substring(startIndex)
+            Log.d(TAG, "upDateApk: "+result)
+            str1 = if (result.endsWith(".apk")) {
+                "apk"
+            } else if (result.endsWith(".png")) {
+                "png"
+            }  else if (result.endsWith(".jpg")) {
+                "jpg"
+            } else {
+                "mp4"
+            }
+        }
+        val client = OkHttpClient()
+
+        val request = Request.Builder()
+            .url(kindData)
+            .build()
+
+        client.newCall(request).enqueue(object : Callback {
+            override fun onFailure(call: Call, e: IOException) {
+                Log.d(TAG, "newCall onFailure: "+e.message)
+                e.printStackTrace()
+            }
+
+            override fun onResponse(call: Call, response: Response) {
+                if (response.isSuccessful) {
+                    Log.d(TAG, "newCall isSuccessful: ")
+                    // 下载成功
+                    val inputStream: InputStream? = response.body?.byteStream()
+                    var pathName = ""
+                    if (str1.equals("apk")){
+                        pathName="/apk/" + "mht.apk"
+                    }else if (str1=="jpg"||str1=="png"){
+                        pathName="/pic/"+result
+                    }
+                    Log.d(TAG, "upDateApk:2  "+pathName+"  :"+str1)
+                    // 获取目标目录
+                    var file = File(pathName)
+                    if (!file.exists()) {
+                        file.mkdirs()
+                    }
+
+                    file= File(Environment.getExternalStorageDirectory().path + pathName)
+                    val outputStream = FileOutputStream(file)
+                    inputStream?.use { input ->
+                        outputStream.use { output ->
+                            input.copyTo(output)
+                        }
+                    }
+                    if (str1!="apk"){
+                        MediaScannerConnection.scanFile(context, arrayOf(file.absolutePath), null, null)
+                    }else{
+                        val mManager: XzjhSystemManager =
+                            context.getSystemService("xzjh_server") as XzjhSystemManager
+                        mManager.xzjhSilentInstallApkV2(
+                            Environment.getExternalStorageDirectory().path + "/apk/" + "mht.apk",
+                            true
+                        )
+                    }
+                } else {
+                    Log.d(TAG, "newCall failed: ")
+                    // 响应失败
+                }
+            }
+        })
+    }
+
     /**
      * 远程上传日志文件
      *

BIN
module_home/src/main/res/drawable/icon_warring.png


+ 3 - 4
module_home/src/main/res/layout/backstage_dialog_warring.xml

@@ -6,8 +6,8 @@
     android:layout_height="match_parent">
 
     <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="800dp"
-        android:layout_height="350dp"
+        android:layout_width="900dp"
+        android:layout_height="450dp"
         android:layout_gravity="center"
         android:background="@drawable/home_rectangle_background"
         android:paddingHorizontal="30dp"
@@ -20,9 +20,8 @@
             android:id="@+id/iv_warring_img"
             android:layout_width="250dp"
             android:layout_height="250dp"
-            android:background="@drawable/home_shape_gray"
             android:padding="10dp"
-            android:src="@drawable/icon_zhifu_pay"
+            android:src="@drawable/icon_warring"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />

+ 1 - 1
module_pay/src/main/java/com/module/pay/common/OtherEnum.kt

@@ -17,7 +17,7 @@ import com.quyunshuo.androidbaseframemvvm.common.util.AmountMoney
  */
 enum class OtherEnum(var nameId:Int,var nameS:String,var category:String,var default:Any,var type:Int,var mmkvName: String) {
     CONTACT_WAY(R.string.contact_way,"联系方式","系统设置","123456", 7,MMKVName.CONTACT_WAY),
-    CONTACT(R.string.contact,"联系名字","系统设置","联系人", 7,MMKVName.CONTACT),
+    CONTACT(R.string.contact,"联系名字","系统设置","name", 7,MMKVName.CONTACT),
 //    AUTO_START_HOTSPOT(R.string.auto_start_hotspot,"开启自启热点","系统设置",false,1, MMKVName.AUTO_START_HOTSPOT),
 //    NAME_HOTSPOT(R.string.name_hotspot,"热点名称","系统设置","sunzee",2, MMKVName.NAME_HOTSPOT),
 //    PWD_HOTSPOT(R.string.pwd_hotspot,"热点密码","系统设置","66666666",2, MMKVName.PWD_HOTSPOT),