浏览代码

双语言

ccc 9 月之前
父节点
当前提交
ce839053bc
共有 71 个文件被更改,包括 2793 次插入577 次删除
  1. 4 2
      .idea/misc.xml
  2. 91 73
      BaseLibrary/class_files.txt
  3. 4 1
      BaseLibrary/src/main/java/com/hboxs/base_library/base/BaseApplication.java
  4. 100 89
      BaseLibrary/src/main/java/com/hboxs/base_library/util/LanguageUtil.java
  5. 1 1
      BaseLibrary/src/main/res/drawable/selector_language_bg.xml
  6. 1 1
      BaseLibrary/src/main/res/values-ar/strings.xml
  7. 1 0
      app/src/main/AndroidManifest.xml
  8. 2 2
      app/src/main/java/com/bgy/autosale/App.java
  9. 0 1
      app/src/main/java/com/bgy/autosale/RemoteSupportService.java
  10. 17 13
      app/src/main/java/com/bgy/autosale/payutil/MQService.java
  11. 4 0
      app/src/main/java/com/bgy/autosale/payutil/PaySelectFragment.java
  12. 4 0
      app/src/main/java/com/bgy/autosale/ui/EasyErrorActivity.java
  13. 19 6
      app/src/main/java/com/bgy/autosale/ui/MainActivity.java
  14. 4 0
      app/src/main/java/com/bgy/autosale/ui/base/BaseAutoExitFragment.java
  15. 179 1
      app/src/main/java/com/bgy/autosale/ui/consumer/IceCreamFragment.java
  16. 5 0
      app/src/main/java/com/bgy/autosale/ui/consumer/MainFragment.java
  17. 4 1
      app/src/main/java/com/bgy/autosale/ui/consumer/PayFragment.java
  18. 4 1
      app/src/main/java/com/bgy/autosale/ui/consumer/PaySuccessFragment.java
  19. 4 0
      app/src/main/java/com/bgy/autosale/ui/consumer/ServiceFragment.java
  20. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/AuthNumberActivity.java
  21. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/DeviceManagerActivity.java
  22. 520 0
      app/src/main/java/com/bgy/autosale/ui/operator/LanguageActivity.java
  23. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/LocalAlarmClockActivity.java
  24. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/LockActivity.java
  25. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/MyFragmentActivity.java
  26. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/SnSettingActivity.java
  27. 52 5
      app/src/main/java/com/bgy/autosale/ui/operator/SwitchSettingActivity.java
  28. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/TextSettingActivity.java
  29. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/TimeSettingActivity.java
  30. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/UpdatePasswordActivity.java
  31. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/WebActivity.java
  32. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanConfigFragment.java
  33. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanFinishFragment.java
  34. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanScheduleFragment.java
  35. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/CommonFragment.java
  36. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/ConfigFragment.java
  37. 5 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/ControlFragment.java
  38. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/DevicesWarningFragment.java
  39. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/LogFragment.java
  40. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/OperateCheckFragment.java
  41. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/OtherSettingFragment.java
  42. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/PriceFragment.java
  43. 4 0
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/SelectIconFragment.java
  44. 4 1
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/SwitchFragment.java
  45. 39 10
      app/src/main/java/com/bgy/autosale/ui/operator/fragments/TechnologySupportFragment.java
  46. 115 0
      app/src/main/java/com/bgy/autosale/utils/FlowRadioGroup.java
  47. 二进制
      app/src/main/res/drawable/btn_qxxuanzhong.png
  48. 507 0
      app/src/main/res/layout/activity_language.xml
  49. 70 1
      app/src/main/res/layout/activity_system_switch_setting.xml
  50. 8 6
      app/src/main/res/layout/dialog_credit_card.xml
  51. 69 0
      app/src/main/res/layout/fragment_ice_cream.xml
  52. 1 0
      app/src/main/res/layout/fragment_main.xml
  53. 1 1
      app/src/main/res/values-ar/strings.xml
  54. 1 0
      app/src/main/res/values-cs/strings.xml
  55. 1 0
      app/src/main/res/values-de/strings.xml
  56. 1 0
      app/src/main/res/values-en/strings.xml
  57. 1 0
      app/src/main/res/values-es/strings.xml
  58. 1 0
      app/src/main/res/values-et/strings.xml
  59. 505 0
      app/src/main/res/values-fr/strings.xml
  60. 1 0
      app/src/main/res/values-hy/strings.xml
  61. 1 0
      app/src/main/res/values-ko/strings.xml
  62. 1 0
      app/src/main/res/values-lt/strings.xml
  63. 1 0
      app/src/main/res/values-lv/strings.xml
  64. 1 0
      app/src/main/res/values-ms/strings.xml
  65. 1 0
      app/src/main/res/values-ro/strings.xml
  66. 1 0
      app/src/main/res/values-ru/strings.xml
  67. 1 0
      app/src/main/res/values-th/strings.xml
  68. 2 0
      app/src/main/res/values-zh/strings.xml
  69. 0 2
      app/src/main/res/values/strings.xml
  70. 1 1
      config.gradle
  71. 349 349
      module_offpay/class_files.txt

+ 4 - 2
.idea/misc.xml

@@ -4,6 +4,7 @@
     <option name="filePathToZoomLevelMap">
       <map>
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/dingdian_seekbar_progress_drawable.xml" value="0.155" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/selector_language_bg.xml" value="0.1595" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/shape_btn_back.xml" value="0.141" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/shape_btn_login.xml" value="0.155" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/BaseLibrary/src/main/res/drawable/shape_et_login.xml" value="0.141" />
@@ -21,6 +22,7 @@
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_device_manager.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_error.xml" value="0.176" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_fragment.xml" value="0.24947916666666667" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_language.xml" value="0.1859472049689441" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_localalarmclock.xml" value="0.136" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_lock.xml" value="0.152" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/activity_main.xml" value="0.2" />
@@ -33,8 +35,8 @@
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_alarm_clock.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_alarm_clock_tp.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_coin_sucess.xml" value="0.24947916666666667" />
-        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_credit_card.xml" value="0.536" />
-        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_mdbcredit_card.xml" value="0.6" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_credit_card.xml" value="0.6645367412140575" />
+        <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_mdbcredit_card.xml" value="0.2" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_mix_pay_now.xml" value="0.72" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_pay.xml" value="0.24947916666666667" />
         <entry key="..\:/Users/Desktop/iceCream-QX/icecream-lite-main/app/src/main/res/layout/dialog_select_icon.xml" value="0.24947916666666667" />

+ 91 - 73
BaseLibrary/class_files.txt

@@ -359413,10 +359413,11 @@ _____________________________________________________________________
 
 Interfaces (count = 0):
 
-Constant Pool (count = 144):
+Constant Pool (count = 150):
   + String [BaseApplication]
   + String [notes-db]
   + String [onCreate: ]
+  + String [onCreate: Hawk]
   + Class [android/app/Application]
   + Class [android/database/sqlite/SQLiteDatabase]
   + Class [android/database/sqlite/SQLiteDatabase$CursorFactory]
@@ -359456,6 +359457,7 @@ Constant Pool (count = 144):
   + Methodref [com/hboxs/base_library/e/c.k ()Lcom/hboxs/base_library/e/c;]
   + Methodref [com/hboxs/base_library/e/e.initialize (Landroid/content/Context;)Ljava/lang/String;]
   + Methodref [com/orhanobut/hawk/Hawk.init (Landroid/content/Context;)Lcom/orhanobut/hawk/HawkBuilder;]
+  + Methodref [com/orhanobut/hawk/Hawk.isBuilt ()Z]
   + Methodref [com/orhanobut/hawk/HawkBuilder.build ()V]
   + Methodref [com/orhanobut/logger/Logger.addLogAdapter (Lcom/orhanobut/logger/LogAdapter;)V]
   + Methodref [java/lang/StringBuilder.<init> ()V]
@@ -359484,6 +359486,7 @@ Constant Pool (count = 144):
   + NameAndType [init (Landroid/content/Context;)V]
   + NameAndType [initialize (Landroid/content/Context;)Ljava/lang/String;]
   + NameAndType [install (Landroid/content/Context;)V]
+  + NameAndType [isBuilt ()Z]
   + NameAndType [k ()Lcom/hboxs/base_library/e/c;]
   + NameAndType [mContext Landroid/content/Context;]
   + NameAndType [onCreate ()V]
@@ -359494,6 +359497,7 @@ Constant Pool (count = 144):
   + Utf8 [()Lcom/hboxs/base_library/e/c;]
   + Utf8 [()Ljava/lang/String;]
   + Utf8 [()V]
+  + Utf8 [()Z]
   + Utf8 [(Landroid/content/Context;)Lcom/orhanobut/hawk/HawkBuilder;]
   + Utf8 [(Landroid/content/Context;)Ljava/lang/String;]
   + Utf8 [(Landroid/content/Context;)V]
@@ -359550,12 +359554,14 @@ Constant Pool (count = 144):
   + Utf8 [init]
   + Utf8 [initialize]
   + Utf8 [install]
+  + Utf8 [isBuilt]
   + Utf8 [java/lang/StringBuilder]
   + Utf8 [k]
   + Utf8 [mContext]
   + Utf8 [notes-db]
   + Utf8 [onCreate]
   + Utf8 [onCreate: ]
+  + Utf8 [onCreate: Hawk]
   + Utf8 [toString]
 
 Fields (count = 6):
@@ -359585,7 +359591,7 @@ Methods (count = 6):
     Class member attributes (count = 1):
     + Code attribute instructions (code length = 5, locals = 1, stack = 1):
       [0] aload_0 v0
-      [1] invokespecial #27
+      [1] invokespecial #28
         + Methodref [android/app/Application.<init> ()V]
       [4] return
       Code attribute exceptions (count = 0):
@@ -359596,157 +359602,169 @@ Methods (count = 6):
     Access flags: 0x1
       = public void onCreate()
     Class member attributes (count = 1):
-    + Code attribute instructions (code length = 69, locals = 2, stack = 3):
+    + Code attribute instructions (code length = 83, locals = 2, stack = 3):
       [0] aload_0 v0
-      [1] invokespecial #29
+      [1] invokespecial #30
         + Methodref [android/app/Application.onCreate ()V]
       [4] aload_0 v0
-      [5] putstatic #26
+      [5] putstatic #27
         + Fieldref [com/hboxs/base_library/base/BaseApplication.mContext Landroid/content/Context;]
       [8] aload_0 v0
-      [9] putstatic #24
+      [9] putstatic #25
         + Fieldref [com/hboxs/base_library/base/BaseApplication.aa Lcom/hboxs/base_library/base/BaseApplication;]
-      [12] aload_0 v0
-      [13] invokestatic #42
+      [12] invokestatic #44
+        + Methodref [com/orhanobut/hawk/Hawk.isBuilt ()Z]
+      [15] ifne +18 (target=33)
+      [18] aload_0 v0
+      [19] invokestatic #43
         + Methodref [com/orhanobut/hawk/Hawk.init (Landroid/content/Context;)Lcom/orhanobut/hawk/HawkBuilder;]
-      [16] invokevirtual #43
+      [22] invokevirtual #45
         + Methodref [com/orhanobut/hawk/HawkBuilder.build ()V]
-      [19] aload_0 v0
-      [20] invokestatic #41
+      [25] ldc #1
+        + String [BaseApplication]
+      [27] ldc #4
+        + String [onCreate: Hawk]
+      [29] invokestatic #32
+        + Methodref [android/util/Log.d (Ljava/lang/String;Ljava/lang/String;)I]
+      [32] pop
+      [33] aload_0 v0
+      [34] invokestatic #42
         + Methodref [com/hboxs/base_library/e/e.initialize (Landroid/content/Context;)Ljava/lang/String;]
-      [23] astore_1 v1
-      [24] ldc #1
+      [37] astore_1 v1
+      [38] ldc #1
         + String [BaseApplication]
-      [26] new #19
+      [40] new #20
         + Class [java/lang/StringBuilder]
-      [29] dup
-      [30] invokespecial #45
+      [43] dup
+      [44] invokespecial #47
         + Methodref [java/lang/StringBuilder.<init> ()V]
-      [33] ldc #3
+      [47] ldc #3
         + String [onCreate: ]
-      [35] invokevirtual #46
+      [49] invokevirtual #48
         + Methodref [java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;]
-      [38] aload_1 v1
-      [39] invokevirtual #46
+      [52] aload_1 v1
+      [53] invokevirtual #48
         + Methodref [java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;]
-      [42] invokevirtual #47
+      [56] invokevirtual #49
         + Methodref [java/lang/StringBuilder.toString ()Ljava/lang/String;]
-      [45] invokestatic #31
+      [59] invokestatic #32
         + Methodref [android/util/Log.d (Ljava/lang/String;Ljava/lang/String;)I]
-      [48] pop
-      [49] aload_0 v0
-      [50] invokespecial #35
+      [62] pop
+      [63] aload_0 v0
+      [64] invokespecial #36
         + Methodref [com/hboxs/base_library/base/BaseApplication.d ()V]
-      [53] invokestatic #40
+      [67] invokestatic #41
         + Methodref [com/hboxs/base_library/e/c.k ()Lcom/hboxs/base_library/e/c;]
-      [56] aload_0 v0
-      [57] invokevirtual #39
+      [70] aload_0 v0
+      [71] invokevirtual #40
         + Methodref [com/hboxs/base_library/e/c.init (Landroid/content/Context;)V]
-      [60] aload_0 v0
-      [61] invokespecial #34
+      [74] aload_0 v0
+      [75] invokespecial #35
         + Methodref [com/hboxs/base_library/base/BaseApplication.b ()V]
-      [64] iconst_1
-      [65] putstatic #20
+      [78] iconst_1
+      [79] putstatic #21
         + Fieldref [com/hboxs/base_library/a/a.av Z]
-      [68] return
+      [82] return
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
-      + Line number table attribute (count = 11):
+      + Line number table attribute (count = 13):
         [0] -> line 45
         [4] -> line 46
         [8] -> line 47
         [12] -> line 48
-        [19] -> line 49
-        [24] -> line 50
-        [49] -> line 51
-        [53] -> line 52
-        [60] -> line 53
-        [64] -> line 56
-        [68] -> line 57
+        [18] -> line 49
+        [25] -> line 50
+        [33] -> line 52
+        [38] -> line 53
+        [63] -> line 54
+        [67] -> line 55
+        [74] -> line 56
+        [78] -> line 59
+        [82] -> line 60
   + Method:       b()V
     Access flags: 0x2
       = private void b()
     Class member attributes (count = 1):
     + Code attribute instructions (code length = 53, locals = 1, stack = 6):
       [0] aload_0 v0
-      [1] new #13
+      [1] new #14
         + Class [com/hboxs/base_library/beans/db/GreenDaoOpenHelper]
       [4] dup
       [5] aload_0 v0
       [6] ldc #2
         + String [notes-db]
       [8] aconst_null
-      [9] invokespecial #37
+      [9] invokespecial #38
         + Methodref [com/hboxs/base_library/beans/db/GreenDaoOpenHelper.<init> (Landroid/content/Context;Ljava/lang/String;Landroid/database/sqlite/SQLiteDatabase$CursorFactory;)V]
-      [12] putfield #21
+      [12] putfield #22
         + Fieldref [com/hboxs/base_library/base/BaseApplication.X Lcom/hboxs/base_library/beans/db/GreenDaoOpenHelper;]
       [15] aload_0 v0
       [16] aload_0 v0
-      [17] getfield #21
+      [17] getfield #22
         + Fieldref [com/hboxs/base_library/base/BaseApplication.X Lcom/hboxs/base_library/beans/db/GreenDaoOpenHelper;]
-      [20] invokevirtual #38
+      [20] invokevirtual #39
         + Methodref [com/hboxs/base_library/beans/db/GreenDaoOpenHelper.getWritableDatabase ()Landroid/database/sqlite/SQLiteDatabase;]
-      [23] putfield #22
+      [23] putfield #23
         + Fieldref [com/hboxs/base_library/base/BaseApplication.Y Landroid/database/sqlite/SQLiteDatabase;]
       [26] aload_0 v0
-      [27] new #9
+      [27] new #10
         + Class [com/example/spunsugar/db/a]
       [30] dup
       [31] aload_0 v0
-      [32] getfield #22
+      [32] getfield #23
         + Fieldref [com/hboxs/base_library/base/BaseApplication.Y Landroid/database/sqlite/SQLiteDatabase;]
-      [35] invokespecial #32
+      [35] invokespecial #33
         + Methodref [com/example/spunsugar/db/a.<init> (Landroid/database/sqlite/SQLiteDatabase;)V]
-      [38] putfield #23
+      [38] putfield #24
         + Fieldref [com/hboxs/base_library/base/BaseApplication.Z Lcom/example/spunsugar/db/a;]
       [41] aload_0 v0
       [42] aload_0 v0
-      [43] getfield #23
+      [43] getfield #24
         + Fieldref [com/hboxs/base_library/base/BaseApplication.Z Lcom/example/spunsugar/db/a;]
-      [46] invokevirtual #33
+      [46] invokevirtual #34
         + Methodref [com/example/spunsugar/db/a.a ()Lcom/example/spunsugar/db/b;]
-      [49] putfield #25
+      [49] putfield #26
         + Fieldref [com/hboxs/base_library/base/BaseApplication.ab Lcom/example/spunsugar/db/b;]
       [52] return
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 5):
-        [0] -> line 68
-        [15] -> line 69
-        [26] -> line 71
-        [41] -> line 72
-        [52] -> line 74
+        [0] -> line 71
+        [15] -> line 72
+        [26] -> line 74
+        [41] -> line 75
+        [52] -> line 77
   + Method:       d()V
     Access flags: 0x2
       = private void d()
     Class member attributes (count = 1):
     + Code attribute instructions (code length = 12, locals = 1, stack = 3):
-      [0] new #12
+      [0] new #13
         + Class [com/hboxs/base_library/base/BaseApplication$1]
       [3] dup
       [4] aload_0 v0
-      [5] invokespecial #36
+      [5] invokespecial #37
         + Methodref [com/hboxs/base_library/base/BaseApplication$1.<init> (Lcom/hboxs/base_library/base/BaseApplication;)V]
-      [8] invokestatic #44
+      [8] invokestatic #46
         + Methodref [com/orhanobut/logger/Logger.addLogAdapter (Lcom/orhanobut/logger/LogAdapter;)V]
       [11] return
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 2):
-        [0] -> line 86
-        [11] -> line 93
+        [0] -> line 89
+        [11] -> line 96
   + Method:       getContext()Landroid/content/Context;
     Access flags: 0x9
       = public static android.content.Context getContext()
     Class member attributes (count = 1):
     + Code attribute instructions (code length = 4, locals = 0, stack = 1):
-      [0] getstatic #26
+      [0] getstatic #27
         + Fieldref [com/hboxs/base_library/base/BaseApplication.mContext Landroid/content/Context;]
       [3] areturn
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 1):
-        [0] -> line 127
+        [0] -> line 130
   + Method:       attachBaseContext(Landroid/content/Context;)V
     Access flags: 0x4
       = protected void attachBaseContext(android.content.Context)
@@ -359754,18 +359772,18 @@ Methods (count = 6):
     + Code attribute instructions (code length = 10, locals = 2, stack = 2):
       [0] aload_0 v0
       [1] aload_1 v1
-      [2] invokespecial #28
+      [2] invokespecial #29
         + Methodref [android/app/Application.attachBaseContext (Landroid/content/Context;)V]
       [5] aload_0 v0
-      [6] invokestatic #30
+      [6] invokestatic #31
         + Methodref [android/support/multidex/MultiDex.install (Landroid/content/Context;)V]
       [9] return
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 3):
-        [0] -> line 132
-        [5] -> line 133
-        [9] -> line 134
+        [0] -> line 135
+        [5] -> line 136
+        [9] -> line 137
 
 Class file attributes (count = 2):
   + Inner classes attribute (count = 2):
@@ -359840,7 +359858,7 @@ Methods (count = 2):
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 1):
-        [0] -> line 86
+        [0] -> line 89
   + Method:       isLoggable(ILjava/lang/String;)Z
     Access flags: 0x1
       = public boolean isLoggable(int,java.lang.String)
@@ -359851,7 +359869,7 @@ Methods (count = 2):
       Code attribute exceptions (count = 0):
       Code attribute attributes (attribute count = 1):
       + Line number table attribute (count = 1):
-        [0] -> line 88
+        [0] -> line 91
 
 Class file attributes (count = 3):
   + Enclosing method attribute:

+ 4 - 1
BaseLibrary/src/main/java/com/hboxs/base_library/base/BaseApplication.java

@@ -45,7 +45,10 @@ public class BaseApplication extends Application {
         super.onCreate();
         mContext = this;
         baseApplication = this;
-        Hawk.init(this).build();
+        if (!Hawk.isBuilt()) {
+            Hawk.init(this).build();
+            Log.d(TAG, "onCreate: Hawk");
+        }
         String initialize = MMKVUtil.initialize(this);//初始化MMKV
         Log.d(TAG, "onCreate: "+initialize);
         config();

+ 100 - 89
BaseLibrary/src/main/java/com/hboxs/base_library/util/LanguageUtil.java

@@ -1,8 +1,8 @@
 package com.hboxs.base_library.util;
 
+import android.content.SharedPreferences;
 import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.util.DisplayMetrics;
+import android.preference.PreferenceManager;
 
 import com.hboxs.base_library.base.BaseApplication;
 import com.hboxs.base_library.constant.Name;
@@ -14,50 +14,64 @@ import java.util.Locale;
  * 语言代码参考(https://www.cnblogs.com/jacksoft/p/5771130.html)
  */
 public class LanguageUtil {
+
+    private static final String TAG = "LanguageUtil";
+
+//    public static Context attachBaseContext(Context context, String language) {
+//        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+//            return createConfigurationResources(language);
+//        } else {
+//            applyLanguage(language);
+//            return context;
+//        }
+//    }
+
     // 中文 英文 德语 俄语 日语 西班牙语 法语
-    private static final String[] language = {
+    public static final String[] language = {
             "zh_CN", "en", "de", "ru", "ja", "es",
             "fr", "bg", "da", "fi", "nl", "cs",
             "ro", "no", "pt", "sv", "sk", "hu",
             "it", "ab", "ko", "pl", "uk", "hy",
             "ar", "th", "sq", "ka", "aa", "ba",
-            "tr", "lv", "ak","et","mn"};
+            "tr", "lv", "ak", "et", "mn", "am", "kk"};
     public static final String CHINESE = language[0]; //中文
     public static final String ENGLISH = language[1]; //英文
     public static final String GERMAN = language[2]; //德语
     public static final String RUSSIA = language[3]; //俄语
-    public static final String JAPANESE = language[4]; //日语
+//    public static final String JAPANESE = language[4]; //日语
     public static final String SPANISH = language[5]; //西班牙语
     public static final String FRENCH = language[6]; //法语
-    public static final String BULGARIA = language[7];//保加利亚
-    public static final String DanMai = language[8];//丹麦
-    public static final String FenLan = language[9];//芬兰
-    public static final String HeLan = language[10];//荷兰
-    public static final String JieKe = language[11];//捷克
+//    public static final String BULGARIA = language[7];//保加利亚
+//    public static final String DanMai = language[8];//丹麦
+//    public static final String FenLan = language[9];//芬兰
+//    public static final String HeLan = language[10];//荷兰
+//    public static final String JieKe = language[11];//捷克
     public static final String RouMaNiYa = language[12];//罗马尼亚
-    public static final String NuoWei = language[13];//挪威
-    public static final String PuTaoYa = language[14];//葡萄牙
-    public static final String RuiShi = language[15];//瑞士
-    public static final String SiFaLuoKe = language[16];//斯伐洛克
-    public static final String XiongYaLi = language[17];//匈牙利
-    public static final String YiDaLi = language[18];//意大利
-    public static final String TaiWang = language[19];//臺灣
+//    public static final String NuoWei = language[13];//挪威
+//    public static final String PuTaoYa = language[14];//葡萄牙
+//    public static final String RuiShi = language[15];//瑞士
+//    public static final String SiFaLuoKe = language[16];//斯伐洛克
+//    public static final String XiongYaLi = language[17];//匈牙利
+//    public static final String YiDaLi = language[18];//意大利
+//    public static final String TaiWang = language[19];//臺灣
     public static final String hangguo = language[20];//韩语
-    public static final String bolan = language[21];//波兰
-    public static final String wukelan = language[22];//乌克兰
+//    public static final String bolan = language[21];//波兰
+//    public static final String wukelan = language[22];//乌克兰
     public static final String ymny = language[23];//亚美尼亚
     public static final String alb = language[24];//阿拉伯语
     public static final String tg = language[25];//泰國
-    public static final String ysl = language[26];//以色列
-    public static final String brazil = language[27];//巴西
-    public static final String gljy = language[28];//格鲁吉亚
-    public static final String brazi2 = language[29];//巴西3
-    public static final String turkey = language[30];//土耳其
+//    public static final String ysl = language[26];//以色列
+//    public static final String brazil = language[27];//巴西
+//    public static final String gljy = language[28];//格鲁吉亚
+//    public static final String brazi2 = language[29];//巴西3
+//    public static final String turkey = language[30];//土耳其
     public static final String latvia = language[31];//拉脱维亚
-    public static final String ricardoAmaro = language[32];//葡萄牙  Ricardo Amaro
-    public static final String eesti  = language[33];//爱沙尼亚
+//    public static final String ricardoAmaro = language[32];//葡萄牙  Ricardo Amaro
+    public static final String eesti = language[33];//爱沙尼亚
 
-    public static final String mgy  = language[34];//蒙古
+//    public static final String mgy = language[34];//蒙古
+//    public static final String bosiyu = language[35];//波斯语
+//    public static final String hasakesitan = language[36];//哈萨克斯坦
 
 
     public static final String[] LANGUAGE_TEXT = {
@@ -65,130 +79,127 @@ public class LanguageUtil {
             "Français(法语)", "България(保加利亚语)", "Dansk(丹麦语)", "Suomalainen(芬兰语)", "Nederlands(荷兰语)", "Česky(捷克语)",
             "Românesc(罗马尼亚语)", "Norsk språk(挪威语)", "Português(葡萄牙语)", "Svenska(瑞典语)", "Slovenského(斯洛伐克语)", "Magyar(匈牙利语)",
             "Lingua italiana(意大利语)", "繁體中文", "한국어(韩语)", "Polska(波兰语)", "Ukrainian(乌克兰语)", "Հայաստան(亚美尼亚语)",
-            "(阿拉伯语)عرب","ไทย(泰语)", "(希伯来语)יִשׂרְאֵלִי", "Brazil-2DHR(巴西语)", "საქართველოს(格鲁吉亚语)", "Brazil-3(巴西语)",
-            "turkey(土耳其语)", "Latvija(拉脱维亚语)", "Portugal-RA(葡萄牙语)","Eesti(爱沙尼亚)","Монгол(蒙古语)"
+            "(阿拉伯语)عرب", "ไทย(泰语)", "(希伯来语)יִשׂרְאֵלִי", "Brazil-2DHR(巴西语)", "საქართველოს(格鲁吉亚语)", "Brazil-3(巴西语)",
+            "turkey(土耳其语)", "Latvija(拉脱维亚语)", "Portugal-RA(葡萄牙语)", "Eesti(爱沙尼亚)", "Монгол(蒙古语)", "فارسی(波斯语)", "қазақ(哈萨克语)"
     };
     public static final String[] LANGUAGE_TEXT2 = {
             "中文", "English", "Deutsch", "русский", "日本語", "Español",
             "Français", "България", "Dansk", "Suomalainen", "Nederlands", "Česky",
             "Românesc", "Norsk språk", "Português", "Svenska", "Slovenského", "Magyar",
             "Lingua italiana", "繁體中文", "한국어", "Polska", "Ukrainian", "Հայաստան",
-            "عرب","ไทย", "יִשׂרְאֵלִי", "Brazil", "საქართველოს", "Brazil",
-            "turkey", "Latvija", "Portugal","Eesti","Монгол"
+            "عرب", "ไทย", "יִשׂרְאֵלִי", "Brazil", "საქართველოს", "Brazil",
+            "turkey", "Latvija", "Portugal", "Eesti", "Монгол", "فارسی", "қазақ"
     };
 
     //第二语言:后台显示
     public static final String[] LANGUAGE2 = {
-            "请选择第二语言", "中文", "English(英语)", "Español(西班牙语)", "(阿拉伯语)عرب","Français(法语)",
-             "Deutsch(德语)", "русский(俄语)", "日本語(日语)",
-             "България(保加利亚语)", "Dansk(丹麦语)", "Suomalainen(芬兰语)", "Nederlands(荷兰语)", "Česky(捷克语)",
+            "请选择第二语言", "中文", "English(英语)", "Español(西班牙语)", "(阿拉伯语)عرب", "Français(法语)",
+            "Deutsch(德语)", "русский(俄语)", "日本語(日语)",
+            "България(保加利亚语)", "Dansk(丹麦语)", "Suomalainen(芬兰语)", "Nederlands(荷兰语)", "Česky(捷克语)",
             "Românesc(罗马尼亚语)", "Norsk språk(挪威语)", "Português(葡萄牙语)", "Svenska(瑞典语)", "Slovenského(斯洛伐克语)", "Magyar(匈牙利语)",
             "Lingua italiana(意大利语)", "繁體中文", "한국어(韩语)", "Polska(波兰语)", "Ukrainian(乌克兰语)", "Հայաստան(亚美尼亚语)",
-            "ไทย(泰语)", "(希伯来语)יִשׂרְאֵלִי", "Brazil-2DHR(巴西语)", "საქართველოს(格鲁吉亚语)", "Brazil-3(巴西语)", "turkey(土耳其语)", "Latvija(拉脱维亚语)", "Portugal-RA(葡萄牙语)","Монгол(蒙古语)"
+            "ไทย(泰语)", "(希伯来语)יִשׂרְאֵלִי", "Brazil-2DHR(巴西语)", "საქართველოს(格鲁吉亚语)", "Brazil-3(巴西语)", "turkey(土耳其语)", "Latvija(拉脱维亚语)", "Portugal-RA(葡萄牙语)", "Монгол(蒙古语)", "فارسی(波斯语)", "қазақ(哈萨克语)"
     };
     //第二语言:前台显示
     public static final String[] LANGUAGE3 = {
-            "请选择第二语言", "中文", "English", "Español", "عرب","Français",
+            "请选择第二语言", "中文", "English", "Español", "عرب", "Français",
             "Deutsch", "русский", "日本語",
             "България", "Dansk", "Suomalainen", "Nederlands", "Česky",
             "Românesc", "Norsk språk", "Português", "Svenska", "Slovenského", "Magyar",
             "Lingua italiana", "繁體中文", "한국어", "Polska", "Ukrainian", "Հայաստան",
-            "ไทย", "יִשׂרְאֵלִי", "Brazil-2DHR", "საქართველოს", "Brazil-3", "turkey", "Latvija", "Portugal-RA","Eesti","Монгол"
+            "ไทย", "יִשׂרְאֵלִי", "Brazil-2DHR", "საქართველოს", "Brazil-3", "turkey", "Latvija", "Portugal-RA", "Eesti", "Монгол", "فارسی", "қазақ"
     };
 
     public static void setLanguage() {
+        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(BaseApplication.getContext());
         int languageType = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE, -1);
         if (languageType == 1) {
-            set(LanguageUtil.CHINESE);
+            changeAppLanguage(LanguageUtil.CHINESE);
+            sharedPreferences.edit().putString("LanguageUtil",LanguageUtil.CHINESE);
         } else if (languageType == 2) {
-            set(LanguageUtil.ENGLISH);
+            changeAppLanguage(LanguageUtil.ENGLISH);
         } else if (languageType == 3) {
-            set(LanguageUtil.GERMAN);
+            changeAppLanguage(LanguageUtil.GERMAN);
         } else if (languageType == 4) {
-            set(LanguageUtil.RUSSIA);
+            changeAppLanguage(LanguageUtil.RUSSIA);
         } else if (languageType == 5) {
-            set(LanguageUtil.JAPANESE);
+//            changeAppLanguage(LanguageUtil.JAPANESE);
         } else if (languageType == 6) {
-            set(LanguageUtil.SPANISH);
+            changeAppLanguage(LanguageUtil.SPANISH);
         } else if (languageType == 7) {
-            set(LanguageUtil.FRENCH);
+            changeAppLanguage(LanguageUtil.FRENCH);
         } else if (languageType == 8) {
-            set(LanguageUtil.BULGARIA);
+//            changeAppLanguage(LanguageUtil.BULGARIA);
         } else if (languageType == 9) {
-            set(LanguageUtil.DanMai);
+//            changeAppLanguage(LanguageUtil.DanMai);
         } else if (languageType == 10) {
-            set(LanguageUtil.FenLan);
+//            changeAppLanguage(LanguageUtil.FenLan);
         } else if (languageType == 11) {
-            set(LanguageUtil.HeLan);
+//            changeAppLanguage(LanguageUtil.HeLan);
         } else if (languageType == 12) {
-            set(LanguageUtil.JieKe);
+//            changeAppLanguage(LanguageUtil.JieKe);
         } else if (languageType == 13) {
-            set(LanguageUtil.RouMaNiYa);
+            changeAppLanguage(LanguageUtil.RouMaNiYa);
         } else if (languageType == 14) {
-            set(LanguageUtil.NuoWei);
+//            changeAppLanguage(LanguageUtil.NuoWei);
         } else if (languageType == 15) {
-            set(LanguageUtil.PuTaoYa);
+//            changeAppLanguage(LanguageUtil.PuTaoYa);
         } else if (languageType == 16) {
-            set(LanguageUtil.RuiShi);
+//            changeAppLanguage(LanguageUtil.RuiShi);
         } else if (languageType == 17) {
-            set(LanguageUtil.SiFaLuoKe);
+//            changeAppLanguage(LanguageUtil.SiFaLuoKe);
         } else if (languageType == 18) {
-            set(LanguageUtil.XiongYaLi);
+//            changeAppLanguage(LanguageUtil.XiongYaLi);
         } else if (languageType == 19) {
-            set(LanguageUtil.YiDaLi);
+//            changeAppLanguage(LanguageUtil.YiDaLi);
         } else if (languageType == 20) {
-            set(LanguageUtil.TaiWang);
+//            changeAppLanguage(LanguageUtil.TaiWang);
         } else if (languageType == 21) {
-            set(LanguageUtil.hangguo);
+            changeAppLanguage(LanguageUtil.hangguo);
         } else if (languageType == 22) {
-            set(LanguageUtil.bolan);
+//            changeAppLanguage(LanguageUtil.bolan);
         } else if (languageType == 23) {
-            set(LanguageUtil.wukelan);
+//            changeAppLanguage(LanguageUtil.wukelan);
         } else if (languageType == 24) {
-            set(LanguageUtil.ymny);
+            changeAppLanguage(LanguageUtil.ymny);
         } else if (languageType == 25) {
-            set(LanguageUtil.alb);
+            changeAppLanguage(LanguageUtil.alb);
         } else if (languageType == 26) {
-            set(LanguageUtil.tg);
+            changeAppLanguage(LanguageUtil.tg);
         } else if (languageType == 27) {
-            set(LanguageUtil.ysl);
+//            changeAppLanguage(LanguageUtil.ysl);
         } else if (languageType == 28) {
-            set(LanguageUtil.brazil);
+//            changeAppLanguage(LanguageUtil.brazil);
         } else if (languageType == 29) {
-            set(LanguageUtil.gljy);
+//            changeAppLanguage(LanguageUtil.gljy);
         } else if (languageType == 30) {
-            set(LanguageUtil.brazi2);
+//            changeAppLanguage(LanguageUtil.brazi2);
         } else if (languageType == 31) {
-            set(LanguageUtil.turkey);
+//            changeAppLanguage(LanguageUtil.turkey);
         } else if (languageType == 32) {
-            set(LanguageUtil.latvia);
+            changeAppLanguage(LanguageUtil.latvia);
         } else if (languageType == 33) {
-            set(LanguageUtil.ricardoAmaro);
-        }else if (languageType == 34) {
-            set(LanguageUtil.eesti);
+//            changeAppLanguage(LanguageUtil.ricardoAmaro);
+        } else if (languageType == 34) {
+            changeAppLanguage(LanguageUtil.eesti);
         } else if (languageType == 35) {
-            set(LanguageUtil.mgy);
+//            changeAppLanguage(LanguageUtil.mgy);
+        } else if (languageType == 36) {
+//            changeAppLanguage(LanguageUtil.bosiyu);
+        } else if (languageType == 37) {
+//            changeAppLanguage(LanguageUtil.hasakesitan);
         } else {
-            set(LanguageUtil.CHINESE);
+            changeAppLanguage(LanguageUtil.CHINESE);
             SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 1);
         }
     }
 
-
-    /**
-     * 设置语言
-     *
-     * @param lauType
-     */
-    private static void set(String lauType) {
-        // 本地语言设置
-        Locale myLocale = new Locale(lauType);
-        Resources res = BaseApplication.getContext().getResources();
-        DisplayMetrics dm = res.getDisplayMetrics();
-        Configuration conf = res.getConfiguration();
-        conf.locale = myLocale;
-        res.updateConfiguration(conf, dm);
+    public static void changeAppLanguage(String newLanguage) {
+        Locale locale = new Locale(newLanguage);
+        Configuration conf = BaseApplication.getContext().getResources().getConfiguration();
+        conf.setLocale(locale);
+        BaseApplication.getContext().getResources().updateConfiguration(conf,  BaseApplication.getContext().getResources().getDisplayMetrics());
+        Locale.setDefault(locale);
     }
 
-
 }

+ 1 - 1
BaseLibrary/src/main/res/drawable/selector_language_bg.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_checked="true" android:drawable="@drawable/btn_xuanzhong"></item>
+    <item android:state_checked="true" android:drawable="@drawable/btn_qxxuanzhong"></item>
     <item android:state_checked="false" android:drawable="@drawable/shape_gray_border"></item>
 </selector>

+ 1 - 1
BaseLibrary/src/main/res/values-ar/strings.xml

@@ -375,7 +375,7 @@
     <string name="cha"> لم يتم العثور </string>
     <string name="shengyu"> الباقي </string>
     <string name="pay_success">تم الدفع بنجاح </string>
-    <string name="guanbi">&#160; اغلق بعد </string>
+    <string name="guanbi">اغلق بعد</string>
     <string name="get_sugar1"> يرجى اخذ حلوى القطن في أقرب وقت ممكن,</string>
     <string name="get_sugar2"> وإلا فإن الروبوت سوف إعادة التدوير تلقائيا ، في انتظار الإنتاج القادم </string>
     <string name="pay_again"> شراء مرة أخرى </string>

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -69,6 +69,7 @@
         <activity android:name=".ui.operator.LocalAlarmClockActivity" />
         <activity android:name=".ui.operator.TimeSettingActivity" />
         <activity android:name=".ui.operator.SwitchSettingActivity" />
+        <activity android:name=".ui.operator.LanguageActivity" />
 
         <activity
             android:name=".ui.operator.DeviceManagerActivity"

+ 2 - 2
app/src/main/java/com/bgy/autosale/App.java

@@ -9,8 +9,10 @@ import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.graphics.Typeface;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
+import android.view.View;
 
 import com.bgy.autosale.entitys.ContactBean;
 import com.bgy.autosale.entitys.Result;
@@ -94,7 +96,6 @@ public class App extends BaseApplication {
     public void onCreate() {
         super.onCreate();
         app = this;
-        Hawk.init(this).build();
         //初始化工具库
         boolean isMainProcess = getApplicationContext().getPackageName().equals
                 (getCurrentProcessName());
@@ -288,7 +289,6 @@ public class App extends BaseApplication {
         context.getResources().updateConfiguration(conf, context.getResources().getDisplayMetrics());
         Locale.setDefault(locale);
     }
-
     //初始化商品数据
     private void initGoodsBean() {
         boolean contains = Hawk.contains("PRICEBEAN");

+ 0 - 1
app/src/main/java/com/bgy/autosale/RemoteSupportService.java

@@ -139,7 +139,6 @@ public class RemoteSupportService extends Service implements SendCallback {
             }
         }).start();
         }
-        Hawk.init(this).build();
         startGeTui();
 
         new Handler().postDelayed(new Runnable() {

+ 17 - 13
app/src/main/java/com/bgy/autosale/payutil/MQService.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.payutil;
 
+import static com.hboxs.base_library.base.BaseApplication.getContext;
 import static com.hboxs.base_library.util.ToastUtil.showToast;
 
 import android.app.Service;
@@ -27,6 +28,7 @@ import com.bgy.autosale.helpers.CommunicationHelper;
 import com.bgy.autosale.interfaces.SendCallback;
 import com.bgy.autosale.ui.operator.LockActivity;
 import com.bgy.autosale.ui.MainActivity;
+import com.bgy.autosale.ui.operator.fragments.ControlFragment;
 import com.bgy.autosale.ui.operator.fragments.PriceFragment;
 import com.bgy.autosale.utils.SPUtils;
 import com.example.spunsugar.http.bean.GetAdBean;
@@ -47,10 +49,12 @@ import com.hboxs.base_library.http.observer.HttpResultNotActivityObserver;
 import com.hboxs.base_library.http.observer.HttpResultObserver;
 import com.hboxs.base_library.http.response.HttpResult;
 import com.hboxs.base_library.http.response.HttpResultHandler;
+import com.hboxs.base_library.http.response.HttpStringResultHandler;
 import com.hboxs.base_library.util.FileUtil;
 import com.hboxs.base_library.util.LogUtil;
 import com.hboxs.base_library.util.LogUtils;
 import com.hboxs.base_library.util.SharedPreferencesUtils;
+import com.hboxs.base_library.util.ToastUtil;
 import com.hboxs.base_library.util.UiUtil;
 import com.orhanobut.hawk.Hawk;
 import com.rabbitmq.client.AMQP;
@@ -278,7 +282,7 @@ public class MQService extends Service implements SendCallback {
             case "updateLogo":
                 //修改logo
                 updateLogo(gson, baseBean, kind);
-                EventBus.getDefault().post(new ApiMessageEvent("updateUI","1"));
+                EventBus.getDefault().post(new ApiMessageEvent("updateUI", "1"));
                 break;
             case "updateProductsPrice"://更新价格
                 getProductPrice();
@@ -298,7 +302,7 @@ public class MQService extends Service implements SendCallback {
 //                EventBus.getDefault().post(new ApiMessageEvent("indoor", baseBean.getKind_data()));
                 break;
             case "outdoor"://远程开关外门
-//                EventBus.getDefault().post(new ApiMessageEvent("outdoor", baseBean.getKind_data()));
+                CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_DOOR_CLEAR, this);
                 break;
             case "youxun_pay_success":
 //                pay(gson, baseBean, kind);
@@ -335,14 +339,14 @@ public class MQService extends Service implements SendCallback {
                 }
                 break;
             case "workingMode"://雪糕机的工作模式(0:制冷,1:搅拌,2:保鲜)
-                String mode= baseBean.getKind_data();
-                if (mode.equals("0")){
+                String mode = baseBean.getKind_data();
+                if (mode.equals("0")) {
                     LogUtils.logWrite("远程制冷");
                     CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_REFRIGERATION, this);
-                }else if (mode.equals("1")){
+                } else if (mode.equals("1")) {
                     LogUtils.logWrite("远程搅拌");
                     CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_CLEAN, this);
-                }else if (mode.equals("2")){
+                } else if (mode.equals("2")) {
                     LogUtils.logWrite("远程保鲜");
                     CommunicationHelper.getInstance().sendControl(IceCreamDeviceConstants.ORDER_KEEP_FRESH, this);
                 }
@@ -364,11 +368,11 @@ public class MQService extends Service implements SendCallback {
                         List<ProductsBean> userList = gson.fromJson(result, new TypeToken<List<ProductsBean>>() {
                         }.getType());
                         if (result != null) {
-                            ArrayList<PriceFragment.PriceBean> priceBeans = Hawk.get("PRICEBEAN",new ArrayList<PriceFragment.PriceBean>());
+                            ArrayList<PriceFragment.PriceBean> priceBeans = Hawk.get("PRICEBEAN", new ArrayList<PriceFragment.PriceBean>());
                             //取出list
                             for (ProductsBean productsBean : userList) {
                                 String productName;
-                                String no=productsBean.getNo();
+                                String no = productsBean.getNo();
                                 if (productsBean.getName() != null && !"".equals(productsBean.getName())) {
                                     productName = productsBean.getName();
                                 } else {
@@ -376,8 +380,8 @@ public class MQService extends Service implements SendCallback {
                                 }
                                 Log.d(TAG, ":1getproducts onNext: " + productName + ":" + productsBean.getRmbPrice());
                                 for (PriceFragment.PriceBean priceBean : priceBeans) {
-                                    Log.d(TAG, "getNoonNext: "+priceBean.getNo()+":"+no);
-                                    if (priceBean.getNo().equals(no)){
+                                    Log.d(TAG, "getNoonNext: " + priceBean.getNo() + ":" + no);
+                                    if (priceBean.getNo().equals(no)) {
                                         priceBean.setPriceKey(String.valueOf(productsBean.getRmbPrice()));
                                     }
                                     if (priceBean.getChineseName().equals(productName)) {
@@ -729,7 +733,6 @@ public class MQService extends Service implements SendCallback {
         //开启消费者线程
         //subscribe(incomingMessageHandler);
         basicConsume(1);
-        Log.d(TAG, "oncrect里么的线程开启了");
         mNetWorkBroadCastReciver = new NetWorkBroadCastReciver();
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
@@ -1229,7 +1232,7 @@ public class MQService extends Service implements SendCallback {
                 || "2019".equals(s) || "7391".equals(s) || "0924".equals(s) || "9427".equals(s) || "0735".equals(s)
                 || "5769".equals(s) || "6894".equals(s) || "8123".equals(s) || "5217".equals(s) || "6431".equals(s)
                 || "7777".equals(s) || "8080".equals(s) || "6702".equals(s) || "7772".equals(s) || "7761".equals(s)
-                ||"7773".equals(s)||"7774".equals(s)||"7786".equals(s)) {
+                || "7773".equals(s) || "7774".equals(s) || "7786".equals(s)) {
             Hawk.put("logo", s);
             Hawk.get("logo", "7777");
         }
@@ -1237,6 +1240,7 @@ public class MQService extends Service implements SendCallback {
 
     /**
      * 远程开关机
+     *
      * @param gson
      * @param baseBean
      * @param kind
@@ -1344,7 +1348,7 @@ public class MQService extends Service implements SendCallback {
     private void savePas(Gson gson, BaseBean baseBean, String type) {
         String json = baseBean.getKind_data();
         String s = gson.fromJson(json, String.class);
-        SPUtils.getInstance(this).putString(Constant.SHARE_PREFERENCE_MANAGER_PWD,s);
+        SPUtils.getInstance(this).putString(Constant.SHARE_PREFERENCE_MANAGER_PWD, s);
     }
 
     /**

+ 4 - 0
app/src/main/java/com/bgy/autosale/payutil/PaySelectFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.payutil;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -36,6 +37,9 @@ public class PaySelectFragment extends BaseFragment implements RadioGroup.OnChec
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         TextView realtimeText = findViewById(R.id.nowWaring);
         realtimeText.setText(getString(R.string.pay_select));
 

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/EasyErrorActivity.java

@@ -4,6 +4,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.AppCompatImageView;
@@ -70,6 +71,9 @@ public class EasyErrorActivity extends BaseScanGunActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         EventBus.getDefault().register(this);
         setContentView(R.layout.activity_error);
 

+ 19 - 6
app/src/main/java/com/bgy/autosale/ui/MainActivity.java

@@ -1,8 +1,10 @@
 package com.bgy.autosale.ui;
 
 import android.Manifest;
+import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
@@ -27,6 +29,7 @@ import com.bgy.autosale.helpers.SQLiteHelper;
 import com.bgy.autosale.helpers.UISoundHelper;
 import com.bgy.autosale.payutil.GeTuiUtil;
 import com.bgy.autosale.payutil.MyIntentService;
+import com.bgy.autosale.ui.base.BaseFragment;
 import com.bgy.autosale.ui.base.BaseScanGunActivity;
 import com.bgy.autosale.ui.consumer.MainFragment;
 import com.bgy.autosale.ui.consumer.ServiceFragment;
@@ -39,11 +42,13 @@ import com.bgy.autosale.utils.ReadCacheInfoUtils;
 import com.bgy.autosale.utils.SPUtils;
 import com.example.FaPiaoUtils;
 import com.example.offpay.nayax.CreditCardPresenter;
+import com.hboxs.base_library.base.BaseApplication;
 import com.hboxs.base_library.constant.Global;
 import com.hboxs.base_library.constant.Heartbeat;
 import com.hboxs.base_library.constant.Name;
 import com.hboxs.base_library.event.ApiMessageEvent;
 import com.hboxs.base_library.util.FileUtil;
+import com.hboxs.base_library.util.LanguageUtil;
 import com.hboxs.base_library.util.LogUtil;
 import com.hboxs.base_library.util.SharedPreferencesUtils;
 import com.igexin.sdk.PushManager;
@@ -62,7 +67,7 @@ import top.keepempty.sph.library.SerialPortHelper;
 public class MainActivity extends BaseScanGunActivity {
 
     private final String TAG = "MainActivity";
-
+    public static MainActivity instance;
     private final int REQUEST_PERMISSION_CODE = 1000;
     private static String[] PERMISSIONS_STORAGE = {
             Manifest.permission.READ_EXTERNAL_STORAGE,
@@ -85,7 +90,7 @@ public class MainActivity extends BaseScanGunActivity {
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
-
+        instance = this;
         if (isSleep == 0) {
             //锁机
             Intent intent = new Intent(this, LockActivity.class);
@@ -97,11 +102,16 @@ public class MainActivity extends BaseScanGunActivity {
         Log.d("openService", "run: " + Heartbeat.deviceId + ":" + FileUtil.getDeviceId());
 
         String[] language = App.app.language.split("-");
-        Locale locale = new Locale(language[0], language.length > 1 ? language[1] : "");
-
+//        Locale locale = new Locale(language[0], language.length > 1 ? language[1] : "");
+        int i = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE, 0) - 1;
+        if (i>=0) {
+            String s = LanguageUtil.language[i];
+            Locale locale = new Locale(s);
+            Log.d(TAG, "DynamicActivity onCreate: "+s);
+            App.app.forceLocale(locale, this);
+        }
         GeTuiUtil geTuiUtil = new GeTuiUtil(this);
         geTuiUtil.geTui();
-        App.app.forceLocale(locale, this);
         if (Global.isVersions == 1) {
             App.app.payChannel = SPUtils.getInstance(App.app).getInt(Constant.PAY_CHANNEL, Constant.PAY_ONLINE);
             App.app.runMode = SPUtils.getInstance(App.app).getInt(Constant.RUN_MODE, Constant.RUN_ONLINE);
@@ -247,6 +257,7 @@ public class MainActivity extends BaseScanGunActivity {
         super.onDestroy();
         EventBus.getDefault().unregister(this);
         isDestroy = true;
+        instance = null;
         if (checkDisposable != null) {
             checkDisposable.dispose();
             checkDisposable = null;
@@ -254,7 +265,9 @@ public class MainActivity extends BaseScanGunActivity {
         CleanScheduleHelper.getInstance().destroy();
         CommunicationHelper.getInstance().destroy();
     }
-
+    public static boolean isAlive() {
+        return instance != null;
+    }
     @Override
     public void onBackPressed() {
 

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/base/BaseAutoExitFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.base;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -33,6 +34,9 @@ public abstract class BaseAutoExitFragment extends BaseFragment {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         startFinishDelay();
     }
 

+ 179 - 1
app/src/main/java/com/bgy/autosale/ui/consumer/IceCreamFragment.java

@@ -6,11 +6,14 @@ import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.annotation.SuppressLint;
 import android.app.Dialog;
+import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
 import android.support.v4.app.FragmentTransaction;
 import android.support.v4.content.ContextCompat;
 import android.support.v7.widget.AppCompatImageView;
@@ -31,6 +34,7 @@ import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 import android.view.animation.OvershootInterpolator;
 import android.widget.ImageView;
+import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.bgy.autosale.App;
@@ -60,6 +64,8 @@ import com.bgy.autosale.payutil.dialog.ShoppingTrolleyDialogChoosePay;
 import com.bgy.autosale.ui.MainActivity;
 import com.bgy.autosale.ui.adapters.ShopCartAdapter;
 import com.bgy.autosale.ui.base.BaseAutoExitFragment;
+import com.bgy.autosale.ui.operator.LockActivity;
+import com.bgy.autosale.ui.operator.MyFragmentActivity;
 import com.bgy.autosale.ui.operator.fragments.PriceFragment;
 import com.bgy.autosale.ui.widget.BatchingView;
 import com.bgy.autosale.ui.widget.ClickLinearLayout;
@@ -99,8 +105,10 @@ import com.hboxs.base_library.http.response.HttpResultHandler;
 import com.hboxs.base_library.util.DialogUtil;
 import com.hboxs.base_library.util.DrawableSelectorUtils;
 import com.hboxs.base_library.util.FileUtil;
+import com.hboxs.base_library.util.LanguageUtil;
 import com.hboxs.base_library.util.LogUtil;
 import com.hboxs.base_library.util.LogUtils;
+import com.hboxs.base_library.util.SharedPreferencesUtils;
 import com.hboxs.base_library.util.UiUtil;
 import com.orhanobut.hawk.Hawk;
 import com.zyao89.view.zloading.ZLoadingDialog;
@@ -114,6 +122,8 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
+import java.text.NumberFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -231,9 +241,151 @@ public class IceCreamFragment extends BaseAutoExitFragment implements View.OnCli
         return R.layout.fragment_ice_cream;
     }
 
+    @SuppressLint("SetTextI18n")
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
+        RelativeLayout rlSelectLanguage=view.findViewById(R.id.rl_select_language);
+        if (Hawk.get(Name.LANGUAGE_SHOW,false)){
+            rlSelectLanguage.setVisibility(View.VISIBLE);
+        }
+
+        TextView tvArab=view.findViewById(R.id.tv_arab);
+        int languageNumber = Hawk.get(Name.LANGUAGE2, 4);
+        tvArab.setText(LanguageUtil.LANGUAGE3[languageNumber] + "");
+        tvArab.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                switch (languageNumber) {
+                    case 1:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 0);
+                        break;
+                    case 2:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 2);
+                        break;
+                    case 3:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 6);
+                        break;
+                    case 4:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 25);
+                        break;
+                    case 5:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 7);//法语
+                        break;
+                    case 6:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 3);
+                        break;
+                    case 7:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 4);
+                        break;
+                    case 8:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 5);
+                        break;
+                    case 9:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 8);
+                        break;
+                    case 10:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 9);
+                        break;
+                    case 11:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 10);
+                        break;
+                    case 12:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 11);
+                        break;
+                    case 13:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 12);
+                        break;
+                    case 14:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 13);
+                        break;
+                    case 15:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 14);
+                        break;
+                    case 16:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 15);
+                        break;
+                    case 17:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 16);
+                        break;
+                    case 18:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 17);
+                        break;
+                    case 19:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 18);
+                        break;
+                    case 20:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 19);
+                        break;
+                    case 21:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 20);
+                        break;
+                    case 22:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 21);
+                        break;
+                    case 23:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 22);
+                        break;
+                    case 24:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 23);
+                        break;
+                    case 25:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 24);
+                        break;
+
+                    case 26:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 26);
+                        break;
+                    case 27:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 27);
+                        break;
+                    case 28:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 28);
+                        break;
+                    case 29:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 29);
+                        break;
+                    case 30:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 30);
+                        break;
+                    case 31:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 31);
+                        break;
+                    case 32:
+                        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, 32);
+                        break;
+                }
+                Log.d(TAG, "onClick1: "+languageNumber);
+                LanguageUtil.setLanguage();
+//                Intent intent = getActivity().getIntent(); // 获取当前 Activity 的 Intent
+//                getActivity().finish(); // 结束当前 Activity
+//                startActivity(intent); // 重新启动当前 Activity
+                showToast(getString(R.string.modified_success));
+                exit();
+            }
+        });
+        TextView tvEnglish=view.findViewById(R.id.tv_english);
+        int language = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE2, 1);
+        Log.d(TAG, "onViewCreated: "+language);
+        tvEnglish.setText(LanguageUtil.LANGUAGE_TEXT2[language-1] + "");
+        tvEnglish.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE2, 0));
+                LanguageUtil.setLanguage();
+                Log.d(TAG, "onClick2: "+languageNumber);
+
+//                Intent intent = getActivity().getIntent(); // 获取当前 Activity 的 Intent
+//                getActivity().finish(); // 结束当前 Activity
+//                startActivity(intent); // 重新启动当前 Activity
+                showToast(getString(R.string.modified_success));
+                exit();
+            }
+        });
+
 
         ImageView ivLogo = view.findViewById(R.id.iv_logo);
         DrawableSelectorUtils.setImageLogo(ivLogo);
@@ -907,8 +1059,34 @@ public class IceCreamFragment extends BaseAutoExitFragment implements View.OnCli
         String p = CustomDecimalFormat.getDecimalFormat().format(manualReason == null ? PriceUtil.getDishPriceOne(currentDish) : 0);
 //        String p=priceBean.getPriceDefault();
         Log.d(TAG, "initPrice1111: " + p);
-        double num = Double.parseDouble(p);
+        double num = 0;
+        if (p.contains("٠")|| p.contains("١")|| p.contains("٢")||
+                p.contains("٣")|| p.contains("٤")|| p.contains("٥")||
+                p.contains("٦")|| p.contains("٧")|| p.contains("٨")||
+                p.contains("٩")){
+           String str= p
+                    .replace("٠", "0")
+                    .replace("١", "1")
+                    .replace("٢", "2")
+                    .replace("٣", "3")
+                    .replace("٤", "4")
+                    .replace("٥", "5")
+                    .replace("٦", "6")
+                    .replace("٧", "7")
+                    .replace("٨", "8")
+                    .replace("٩", "9");
+            try {
+                NumberFormat format = NumberFormat.getInstance(Locale.US);
+                Number number = format.parse(str);
+                num = number.doubleValue();
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }else {
+            num = Double.parseDouble(p);
+        }
 
+        Log.d(TAG, "initPrice11112: "+num);
         int endPosition = p.indexOf(".");
         if (endPosition == -1) {
             endPosition = p.length();

+ 5 - 0
app/src/main/java/com/bgy/autosale/ui/consumer/MainFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.consumer;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -40,6 +41,7 @@ import com.bgy.autosale.utils.SPUtils;
 import com.bgy.autosale.utils.ToastUtil;
 import com.hboxs.base_library.event.ApiMessageEvent;
 import com.hboxs.base_library.util.DrawableSelectorUtils;
+import com.hboxs.base_library.util.LanguageUtil;
 import com.orhanobut.hawk.Hawk;
 
 import org.greenrobot.eventbus.EventBus;
@@ -88,6 +90,9 @@ public class MainFragment extends BaseFragment implements RadarCallback {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         ivLogo=view.findViewById(R.id.iv_logo);
         DrawableSelectorUtils.setImageLogo(ivLogo);
         clickView = view.findViewById(R.id.ice_cream_bg);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/consumer/PayFragment.java

@@ -6,6 +6,7 @@ import android.animation.ObjectAnimator;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Paint;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -133,7 +134,9 @@ public class PayFragment extends BaseFragment implements View.OnClickListener, O
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         if (getActivity() != null) {
             if (Constant.useScanGunPay) {
                 ((BaseScanGunActivity) getActivity()).setScanCodeListener(this);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/consumer/PaySuccessFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.consumer;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -100,7 +101,9 @@ public class PaySuccessFragment extends BaseAutoExitFragment implements Callback
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         ErrorViewHelper.getInstance().setCanShowErrorView(false, this);
 
         if (getActivity() != null && getActivity() instanceof BaseScanGunActivity) {

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/consumer/ServiceFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.consumer;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -56,6 +57,9 @@ public class ServiceFragment extends BaseFragment implements View.OnClickListene
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         View v = view.findViewById(R.id.service_visibility);
         v.setOnClickListener(this);
         TextView switchTextView = v.findViewById(R.id.service_visibility_text);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/AuthNumberActivity.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.Nullable;
@@ -58,6 +59,9 @@ public class AuthNumberActivity extends BaseActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_authnumer);
         devInfo = findViewById(R.id.devInfo);
         handler.postDelayed(exitRunnable, UN_AUTH_EXIT_TIME);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/DeviceManagerActivity.java

@@ -5,6 +5,7 @@ import static com.hboxs.base_library.base.BaseApplication.getContext;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.support.annotation.NonNull;
@@ -90,6 +91,9 @@ public class DeviceManagerActivity extends BaseActivity implements View.OnClickL
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_device_manager);
 
         showUnsafeInfo();

+ 520 - 0
app/src/main/java/com/bgy/autosale/ui/operator/LanguageActivity.java

@@ -0,0 +1,520 @@
+package com.bgy.autosale.ui.operator;
+
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Build;
+import android.os.LocaleList;
+import android.support.v7.app.ActionBar;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.RadioGroup;
+
+import com.bgy.autosale.App;
+import com.bgy.autosale.R;
+import com.bgy.autosale.databinding.ActivityLanguageBinding;
+import com.bgy.autosale.helpers.SmallApkHelper;
+import com.hboxs.base_library.base.BaseApplication;
+import com.hboxs.base_library.base.StaticActivity;
+import com.hboxs.base_library.constant.Name;
+import com.hboxs.base_library.util.DrawableSelectorUtils;
+import com.hboxs.base_library.util.LanguageUtil;
+import com.hboxs.base_library.util.ReturnTomainScreenUtil;
+import com.hboxs.base_library.util.SharedPreferencesUtils;
+
+import java.util.Locale;
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+
+/**
+ * @author whw
+ * @create 2019/3/12
+ * @Describe 语言设置界面
+ */
+public class LanguageActivity extends StaticActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
+
+    private static final String TAG = "LanguageActivity";
+    private ActivityLanguageBinding binding;
+
+    @Override
+    protected int getLayout() {
+        return R.layout.activity_language;
+    }
+
+    @Override
+    protected void initView() {
+        ActionBar actionBar = getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.hide();
+        }
+        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
+                WindowManager.LayoutParams.FLAG_FULLSCREEN);
+        binding = (ActivityLanguageBinding) viewDataBindin;
+//        ReturnTomainScreenUtil.stopTimerDown();
+//        ReturnTomainScreenUtil.startTimeDown(this);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
+    }
+
+
+    @Override
+    protected void setSQTheme() {
+        DrawableSelectorUtils.setStyle(this);
+    }
+
+    @Override
+    protected void initListener() {
+        super.initListener();
+        binding.settingBack.setOnClickListener(this);
+        binding.btnReset.setOnClickListener(this);
+        binding.flLanguage.setOnCheckedChangeListener(this);
+//        int idByAttrId = DrawableSelectorUtils.getResourceIdByAttrId(this, R.attr.pay_frame);
+//        binding.rbChinese.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbEnglish.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbGerman.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbRussia.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbJapanese.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbSpanish.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbFrench.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbBulgaria.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbDanmai.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbFenlan.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbHelan.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbJieke.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbLuomaniya.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbNuowei.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbPutaoya.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbRuishi.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbXiongyali.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbSifaluoke.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbYidali.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbTaiwang.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbHany.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbBolan.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbWukelan.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbYmny.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbAlb.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbTg.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbYsl.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbBrazil2.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbGljy.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbBrazil3.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbTurkey.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbLatvia.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbPortugalRa.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbEesti.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbMgy.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbBsy.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//        binding.rbHsky.setBackground(DrawableSelectorUtils.newSelector(this, R.drawable.shape_gray_border, idByAttrId));
+//
+//        binding.rbChinese.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbEnglish.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbGerman.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbRussia.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbJapanese.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbSpanish.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbFrench.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbBulgaria.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbDanmai.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbFenlan.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbHelan.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbJieke.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbLuomaniya.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbNuowei.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbPutaoya.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbRuishi.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbXiongyali.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbSifaluoke.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbYidali.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbTaiwang.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbHany.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbBolan.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbWukelan.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbYmny.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbAlb.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbTg.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbYsl.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbBrazil2.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbGljy.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbBrazil3.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbTurkey.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbLatvia.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbPortugalRa.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbEesti.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbMgy.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbBsy.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+//        binding.rbHsky.setTextColor(DrawableSelectorUtils.createColorStateCheckedList(this));
+    }
+
+    @Override
+    protected void initData() {
+        super.initData();
+        int state = (int) SharedPreferencesUtils.getParam(Name.ACCOUNT_STATE, 0);
+        int language = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE, 1);
+        setRadioButton(language);
+
+    }
+
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent ev) {
+
+        switch (ev.getAction()) {
+            //获取触摸动作,如果ACTION_UP,计时开始。
+            case MotionEvent.ACTION_UP:
+                ReturnTomainScreenUtil.setTime();
+                break;
+            //否则其他动作计时取消
+            default:
+                break;
+
+        }
+        return super.dispatchTouchEvent(ev);
+    }
+
+    int languageType = 1; //默认选择的
+    String languageValue = LanguageUtil.CHINESE;
+
+    @Override
+    public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
+        if (checkedId == R.id.rb_chinese) {
+            languageType = 1;
+            languageValue = LanguageUtil.CHINESE;
+        } else if (checkedId == R.id.rb_english) {
+            languageType = 2;
+            languageValue = LanguageUtil.ENGLISH;
+        } else if (checkedId == R.id.rb_german) {
+            languageType = 3;
+            languageValue = LanguageUtil.GERMAN;
+        } else if (checkedId == R.id.rb_russia) {
+            languageType = 4;
+            languageValue = LanguageUtil.RUSSIA;
+        } else if (checkedId == R.id.rb_japanese) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 5;
+//            languageValue = LanguageUtil.JAPANESE;
+        } else if (checkedId == R.id.rb_Spanish) {
+            languageType = 6;
+            languageValue = LanguageUtil.SPANISH;
+        } else if (checkedId == R.id.rb_french) {
+            languageType = 7;
+            languageValue = LanguageUtil.FRENCH;
+        } else if (checkedId == R.id.rb_bulgaria) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 8;
+//            languageValue = LanguageUtil.BULGARIA;
+        } else if (checkedId == R.id.rb_danmai) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 9;
+//            languageValue = LanguageUtil.DanMai;
+        } else if (checkedId == R.id.rb_fenlan) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 10;
+//            languageValue = LanguageUtil.FenLan;
+        } else if (checkedId == R.id.rb_helan) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 11;
+//            languageValue = LanguageUtil.HeLan;
+        } else if (checkedId == R.id.rb_jieke) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 12;
+//            languageValue = LanguageUtil.JieKe;
+        } else if (checkedId == R.id.rb_luomaniya) {
+            languageType = 13;
+            languageValue = LanguageUtil.RouMaNiYa;
+        } else if (checkedId == R.id.rb_nuowei) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 14;
+//            languageValue = LanguageUtil.NuoWei;
+        } else if (checkedId == R.id.rb_putaoya) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 15;
+//            languageValue = LanguageUtil.PuTaoYa;
+        } else if (checkedId == R.id.rb_ruishi) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 16;
+//            languageValue = LanguageUtil.RuiShi;
+        } else if (checkedId == R.id.rb_sifaluoke) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 17;
+//            languageValue = LanguageUtil.SiFaLuoKe;
+        } else if (checkedId == R.id.rb_xiongyali) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 18;
+//            languageValue = LanguageUtil.XiongYaLi;
+        } else if (checkedId == R.id.rb_yidali) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 19;
+//            languageValue = LanguageUtil.YiDaLi;
+        } else if (checkedId == R.id.rb_taiwang) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 20;
+//            languageValue = LanguageUtil.TaiWang;
+        } else if (checkedId == R.id.rb_hany) {
+            languageType = 21;
+            languageValue = LanguageUtil.hangguo;
+        } else if (checkedId == R.id.rb_bolan) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 22;
+//            languageValue = LanguageUtil.bolan;
+        } else if (checkedId == R.id.rb_wukelan) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 23;
+//            languageValue = LanguageUtil.wukelan;
+        } else if (checkedId == R.id.rb_ymny) {
+            languageType = 24;
+            languageValue = LanguageUtil.ymny;
+        } else if (checkedId == R.id.rb_alb) {
+            languageType = 25;
+            languageValue = LanguageUtil.alb;
+        } else if (checkedId == R.id.rb_tg) {
+            languageType = 26;
+            languageValue = LanguageUtil.tg;
+        } else if (checkedId == R.id.rb_ysl) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 27;
+//            languageValue = LanguageUtil.ysl;
+        } else if (checkedId == R.id.rb_brazil2) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 28;
+//            languageValue = LanguageUtil.brazil;
+        } else if (checkedId == R.id.rb_gljy) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 29;
+//            languageValue = LanguageUtil.gljy;
+        } else if (checkedId == R.id.rb_brazil3) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 30;
+//            languageValue = LanguageUtil.brazi2;
+        } else if (checkedId == R.id.rb_turkey) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 31;
+//            languageValue = LanguageUtil.turkey;
+        } else if (checkedId == R.id.rb_latvia) {
+            languageType = 32;
+            languageValue = LanguageUtil.latvia;
+        } else if (checkedId == R.id.rb_portugal_ra) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 33;
+//            languageValue = LanguageUtil.ricardoAmaro;
+        } else if (checkedId == R.id.rb_eesti) {
+            languageType = 34;
+            languageValue = LanguageUtil.eesti;
+        } else if (checkedId == R.id.rb_mgy) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 35;
+//            languageValue = LanguageUtil.mgy;
+        } else if (checkedId == R.id.rb_bsy) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 36;
+//            languageValue = LanguageUtil.bosiyu;
+        } else if (checkedId == R.id.rb_hsky) {
+            showToast("未有此翻译,请联系添加。");
+            finish();
+            return;
+//            languageType = 37;
+//            languageValue = LanguageUtil.hasakesitan;
+        } else {
+            languageType = 1;
+            languageValue = LanguageUtil.CHINESE;
+        }
+    }
+
+    /**
+     * 设置切换语言
+     */
+    private void setLanguage() {
+        Log.d(TAG, "setLanguage: " + languageType);
+        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE, languageType);
+        SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE2, languageType);
+
+        changeLanguage(languageValue);
+
+    }
+
+    private void changeLanguage(String type) {
+        set(type);
+//        if (MainActivity.isAlive()) {
+//            MainActivity.instance.finish();
+//        }
+//        Intent intent = new Intent(this, MainActivity.class);
+//        startActivity(intent);
+//        finish();
+        showToast(getString(R.string.setting_technology_sn_update));
+
+        AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
+            @Override
+            public void run() {
+                SmallApkHelper.pullMeLaterActivityMode(App.app, 5000);
+                App.app.killActivities();
+            }
+        }, 4, TimeUnit.SECONDS);
+    }
+    public void showToast(String msg) {
+        if (msg == null || BaseApplication.getBaseApplication() == null) {
+            return;
+        }
+        com.bgy.autosale.utils.ToastUtil.getInstance().showText(msg);
+    }
+    private void setRadioButton(int languageType) {
+        if (languageType == 1) {
+            binding.rbChinese.setChecked(true);
+        } else if (languageType == 2) {
+            binding.rbEnglish.setChecked(true);
+        } else if (languageType == 3) {
+            binding.rbGerman.setChecked(true);
+        } else if (languageType == 4) {
+            binding.rbRussia.setChecked(true);
+        } else if (languageType == 5) {
+            binding.rbJapanese.setChecked(true);
+        } else if (languageType == 6) {
+            binding.rbSpanish.setChecked(true);
+        } else if (languageType == 7) {
+            binding.rbFrench.setChecked(true);
+        } else if (languageType == 8) {
+            binding.rbBulgaria.setChecked(true);
+        } else if (languageType == 9) {
+            binding.rbDanmai.setChecked(true);
+        } else if (languageType == 10) {
+            binding.rbFenlan.setChecked(true);
+        } else if (languageType == 11) {
+            binding.rbHelan.setChecked(true);
+        } else if (languageType == 12) {
+            binding.rbJieke.setChecked(true);
+        } else if (languageType == 13) {
+            binding.rbLuomaniya.setChecked(true);
+        } else if (languageType == 14) {
+            binding.rbNuowei.setChecked(true);
+        } else if (languageType == 15) {
+            binding.rbPutaoya.setChecked(true);
+        } else if (languageType == 16) {
+            binding.rbRuishi.setChecked(true);
+        } else if (languageType == 17) {
+            binding.rbSifaluoke.setChecked(true);
+        } else if (languageType == 18) {
+            binding.rbXiongyali.setChecked(true);
+        } else if (languageType == 19) {
+            binding.rbYidali.setChecked(true);
+        } else if (languageType == 20) {
+            binding.rbTaiwang.setChecked(true);
+        } else if (languageType == 21) {
+            binding.rbHany.setChecked(true);
+        } else if (languageType == 22) {
+            binding.rbBolan.setChecked(true);
+        } else if (languageType == 23) {
+            binding.rbWukelan.setChecked(true);
+        } else if (languageType == 24) {
+            binding.rbYmny.setChecked(true);
+        } else if (languageType == 25) {
+            binding.rbAlb.setChecked(true);
+        } else if (languageType == 26) {
+            binding.rbTg.setChecked(true);
+        } else if (languageType == 27) {
+            binding.rbYsl.setChecked(true);
+        } else if (languageType == 28) {
+            binding.rbBrazil2.setChecked(true);
+        } else if (languageType == 29) {
+            binding.rbGljy.setChecked(true);
+        } else if (languageType == 30) {
+            binding.rbBrazil3.setChecked(true);
+        } else if (languageType == 31) {
+            binding.rbTurkey.setChecked(true);
+        } else if (languageType == 32) {
+            binding.rbLatvia.setChecked(true);
+        } else if (languageType == 33) {
+            binding.rbPortugalRa.setChecked(true);
+        } else if (languageType == 34) {
+            binding.rbEesti.setChecked(true);
+        } else if (languageType == 35) {
+            binding.rbMgy.setChecked(true);
+        } else if (languageType == 36) {
+            binding.rbBsy.setChecked(true);
+        } else if (languageType == 37) {
+            binding.rbHsky.setChecked(true);
+        }
+    }
+
+    /**
+     * 设置语言
+     *
+     * @param lauType
+     */
+    private void set(String lauType) {
+        Resources resources = getResources();
+        DisplayMetrics dm = resources.getDisplayMetrics();
+        Locale locale = new Locale(lauType);
+        Locale.setDefault(locale);
+        Log.d(TAG, "setLocale: " + Locale.getDefault());
+        Configuration config = resources.getConfiguration();
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            config.setLocale(locale);
+            LocaleList localeList = new LocaleList(locale);
+            LocaleList.setDefault(localeList);
+            config.setLocales(localeList);
+        } else {
+            config.locale = locale; //设置语言
+        }
+        resources.updateConfiguration(config, dm);
+    }
+
+    @Override
+    public void onClick(View view) {
+        int id = view.getId();
+        if (id == R.id.setting_back) {
+            finish();
+        } else if (id == R.id.btn_reset) {
+            setLanguage();
+        }
+    }
+
+}

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/LocalAlarmClockActivity.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.LinearLayoutManager;
@@ -58,6 +59,9 @@ public class LocalAlarmClockActivity extends BaseScanGunActivity implements View
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_localalarmclock);
         binding = ActivityLocalalarmclockBinding.inflate(getLayoutInflater());
         findViewById(R.id.setting_back).setOnClickListener(this);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/LockActivity.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator;
 
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
@@ -40,6 +41,9 @@ public class LockActivity extends BaseScanGunActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         EventBus.getDefault().register(this);
         setContentView(R.layout.activity_lock);
         TextView tvDeviceId1 = findViewById(R.id.tv_device_id1);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/MyFragmentActivity.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
@@ -43,6 +44,9 @@ public class MyFragmentActivity extends BaseActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_fragment);
 
         View back = findViewById(R.id.back);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/SnSettingActivity.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.text.Editable;
@@ -62,6 +63,9 @@ public class SnSettingActivity extends BaseScanGunActivity implements View.OnCli
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_sn_setting);
 
         editText = findViewById(R.id.sn_input);

+ 52 - 5
app/src/main/java/com/bgy/autosale/ui/operator/SwitchSettingActivity.java

@@ -1,33 +1,60 @@
 package com.bgy.autosale.ui.operator;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.text.InputType;
 import android.view.View;
-import android.widget.EditText;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
+import android.widget.Spinner;
 
 import com.bgy.autosale.R;
 import com.bgy.autosale.ui.base.BaseScanGunActivity;
 import com.hboxs.base_library.constant.Name;
+import com.hboxs.base_library.util.LanguageUtil;
 import com.orhanobut.hawk.Hawk;
 
 /**
  * Created by cjx on 2020-09-08
  * 说明:
  */
-public class SwitchSettingActivity extends BaseScanGunActivity implements View.OnClickListener,RadioGroup.OnCheckedChangeListener {
+public class SwitchSettingActivity extends BaseScanGunActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
 
 
-    RadioButton rbAutoUploadYes,rbAutoUploadNo;
+    RadioButton rbAutoUploadYes, rbAutoUploadNo;
+    RadioButton rbLanguageYes, rbLanguageNo;
+    Spinner spLanguage2;
+    private ArrayAdapter<String> language2ArrayAdapter;
+
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_system_switch_setting);
         findViewById(R.id.setting_back).setOnClickListener(this);
 
-
+        spLanguage2 = findViewById(R.id.sp_language_2);
+        language2ArrayAdapter = new ArrayAdapter<String>(this, R.layout.spinner_text);
+        language2ArrayAdapter.addAll(LanguageUtil.LANGUAGE2);
+        spLanguage2.setAdapter(language2ArrayAdapter);
+        spLanguage2.setSelection(language2ArrayAdapter.getPosition(LanguageUtil.LANGUAGE2[Hawk.get(Name.LANGUAGE2, 0)]), true);
+        spLanguage2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+                if (position==0){
+                    Hawk.put(Name.LANGUAGE2, 1);
+                }else {
+                    Hawk.put(Name.LANGUAGE2, position);
+                }
+            }
+            @Override
+            public void onNothingSelected(AdapterView<?> parent) {
+            }
+        });
         RadioGroup rgAutoUpload = findViewById(R.id.rg_auto_upload);
         rgAutoUpload.setOnCheckedChangeListener(this);
 
@@ -40,13 +67,33 @@ public class SwitchSettingActivity extends BaseScanGunActivity implements View.O
         } else {
             rbAutoUploadNo.setChecked(true);
         }
+
+
+        RadioGroup rgSelectLanguage = findViewById(R.id.rg_select_language);
+        rgSelectLanguage.setOnCheckedChangeListener(this);
+
+        rbLanguageYes = findViewById(R.id.rb_language_yes);
+        rbLanguageNo = findViewById(R.id.rb_language_no);
+
+        Boolean language = Hawk.get(Name.LANGUAGE_SHOW, false);
+        if (language) {
+            rbLanguageYes.setChecked(true);
+        } else {
+            rbLanguageNo.setChecked(true);
+        }
+
     }
+
     @Override
     public void onCheckedChanged(RadioGroup group, int checkedId) {
         if (checkedId == R.id.rb_auto_upload_yes) {
             Hawk.put(Name.AUTOUPLOADORDER, true);
         } else if (checkedId == R.id.rb_auto_upload_no) {
             Hawk.put(Name.AUTOUPLOADORDER, false);
+        } else if (checkedId == R.id.rb_language_yes) {
+            Hawk.put(Name.LANGUAGE_SHOW, true);
+        } else if (checkedId == R.id.rb_language_no) {
+            Hawk.put(Name.LANGUAGE_SHOW, false);
         }
     }
 

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/TextSettingActivity.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.view.View;
@@ -29,6 +30,9 @@ public class TextSettingActivity extends BaseScanGunActivity implements View.OnC
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_system_text_setting);
 
         etSleepText = findViewById(R.id.et_sleep_test);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/TimeSettingActivity.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.text.InputType;
@@ -21,6 +22,9 @@ public class TimeSettingActivity extends BaseScanGunActivity implements View.OnC
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_system_time_setting);
         findViewById(R.id.setting_back).setOnClickListener(this);
 

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/UpdatePasswordActivity.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.Nullable;
@@ -43,6 +44,9 @@ public class UpdatePasswordActivity extends BaseActivity {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_update_password);
 
         handler.postDelayed(exitRunnable, UN_AUTH_EXIT_TIME);

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/WebActivity.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.text.Editable;
@@ -43,6 +44,9 @@ public class WebActivity extends BaseActivity implements View.OnClickListener {
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         setContentView(R.layout.activity_web);
 
         WebView webView = findViewById(R.id.web_view);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanConfigFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -39,7 +40,9 @@ public class CleanConfigFragment extends BaseFragment implements View.OnClickLis
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         view.findViewById(R.id.lock_switch).setOnClickListener(this);
         view.findViewById(R.id.clean_switch).setOnClickListener(this);
         view.findViewById(R.id.schedule_day).setOnFocusChangeListener(this);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanFinishFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -55,7 +56,9 @@ public class CleanFinishFragment extends BaseFragment implements OnCleanListener
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         completeView = view.findViewById(R.id.clean_complete);
 //        if (Constant.isSecondary) {
 //            completeView.setEnabled(false);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/CleanScheduleFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.graphics.Typeface;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -72,7 +73,9 @@ public class CleanScheduleFragment extends BaseFragment implements Handler.Callb
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
 
         cleanTimesView = view.findViewById(R.id.clean_times);
         completeButton = view.findViewById(R.id.clean_complete);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/CommonFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
@@ -65,7 +66,9 @@ public class CommonFragment extends BaseFragment implements View.OnClickListener
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         lightView = view.findViewById(R.id.connect_light);
         connectTipView = view.findViewById(R.id.connect_text);
         errorMessageView = view.findViewById(R.id.error_message);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/ConfigFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -72,7 +73,9 @@ public class ConfigFragment extends BaseFragment implements SendCallback {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         RecyclerView recyclerView = view.findViewById(R.id.recycler_view);
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 

+ 5 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/ControlFragment.java

@@ -1,11 +1,13 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.AppCompatTextView;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.RecyclerView;
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -57,7 +59,9 @@ public class ControlFragment extends BaseFragment implements View.OnClickListene
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         initData();
     }
 

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/fragments/DevicesWarningFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
@@ -52,6 +53,9 @@ public class DevicesWarningFragment extends BaseFragment {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         initData();
     }
 

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/LogFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -43,7 +44,9 @@ public class LogFragment extends BaseFragment implements View.OnClickListener {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         recyclerView = findViewById(R.id.recycler_view);
         recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2));
 

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/OperateCheckFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -66,7 +67,9 @@ public class OperateCheckFragment extends BaseFragment implements Callback<Resul
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         startBgView = view.findViewById(R.id.start_bg);
 
         makeIconView = view.findViewById(R.id.icon_check_make);

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/OtherSettingFragment.java

@@ -2,6 +2,7 @@ package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
 import android.content.Intent;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -54,7 +55,9 @@ public class OtherSettingFragment extends BaseFragment {
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         ArrayList<OtherBean> list = new ArrayList<>();
         list.add(initAlarmClock());
         list.add(initSetMsg());

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/fragments/PriceFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -123,6 +124,9 @@ public class PriceFragment extends BaseFragment implements View.OnClickListener
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         if (Global.isVersions == 1) {
 //        if (Global.isGetProductName == 0 && Global.isVersions == 1) {
             getproducts();

+ 4 - 0
app/src/main/java/com/bgy/autosale/ui/operator/fragments/SelectIconFragment.java

@@ -1,5 +1,6 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
@@ -50,6 +51,9 @@ public class SelectIconFragment extends BaseFragment implements View.OnClickList
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         view.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {

+ 4 - 1
app/src/main/java/com/bgy/autosale/ui/operator/fragments/SwitchFragment.java

@@ -1,6 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
 import android.content.Context;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.support.annotation.NonNull;
@@ -109,7 +110,9 @@ public class SwitchFragment extends BaseFragment implements RadioGroup.OnChecked
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         parentView = (ViewGroup) view.getParent().getParent();
 
         RecyclerView recyclerView1 = view.findViewById(R.id.recycler_view_1);

+ 39 - 10
app/src/main/java/com/bgy/autosale/ui/operator/fragments/TechnologySupportFragment.java

@@ -1,5 +1,7 @@
 package com.bgy.autosale.ui.operator.fragments;
 
+import static com.hboxs.base_library.util.LanguageUtil.language;
+
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -7,6 +9,7 @@ import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -38,7 +41,9 @@ import com.bgy.autosale.payutil.MQService;
 import com.bgy.autosale.payutil.OrderPriceBean;
 import com.bgy.autosale.payutil.UpdateDialog;
 import com.bgy.autosale.ui.base.BaseFragment;
+import com.bgy.autosale.ui.operator.LanguageActivity;
 import com.bgy.autosale.ui.operator.SnSettingActivity;
+import com.bgy.autosale.ui.operator.SwitchSettingActivity;
 import com.bgy.autosale.ui.operator.UpdatePasswordActivity;
 import com.bgy.autosale.utils.ReadCacheInfoUtils;
 import com.bgy.autosale.utils.SPUtils;
@@ -63,6 +68,7 @@ import com.hboxs.base_library.http.response.HttpResult;
 import com.hboxs.base_library.http.response.HttpResultHandler;
 import com.hboxs.base_library.http.response.HttpStringResultHandler;
 import com.hboxs.base_library.util.FileUtil;
+import com.hboxs.base_library.util.LanguageUtil;
 import com.hboxs.base_library.util.LogUtil;
 import com.hboxs.base_library.util.LogUtils;
 import com.hboxs.base_library.util.LongClickUtils;
@@ -124,7 +130,8 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
         new LanguageBean("Melayu(马来语)", "ms", "马来语"),
         new LanguageBean("Română(罗马尼亚语)", "ro", "罗马尼亚语"),
         new LanguageBean("ประเทศไทย(泰语)", "th", "泰语"),
-        new LanguageBean("(阿拉伯语)عربي", "ar", "阿拉伯语")
+        new LanguageBean("(阿拉伯语)عربي", "ar", "阿拉伯语"),
+        new LanguageBean("Français(法语)", "fr", "法语")
 ));
     public static TechnologySupportFragment getFragment() {
         return new TechnologySupportFragment();
@@ -143,7 +150,9 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
-
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            getActivity().getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_LTR);
+        }
         verTv = findViewById(R.id.versionInfo);
         btnSystemLink = findViewById(R.id.btn_system_link);
         btnSystemLink.setOnClickListener(this);
@@ -205,9 +214,11 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
 //        languages.add(new LanguageBean("lietuvių(立陶宛语)", "lt", "立陶宛语"));
 //        languages.add(new LanguageBean("latviski(拉脱维亚语)", "lv", "拉脱维亚语"));
 
+        int param = (int) SharedPreferencesUtils.getParam(Name.LANGUAGE_TYPE, -1);
         TechnologyBean itemBean = new TechnologyBean(ACTION_LANGUAGE);
         itemBean.title = getString(R.string.setting_technology_language);
-        itemBean.describe = SPUtils.getInstance(App.app).getString(Constant.APP_LANGUAGE_TITLE, "简体中文");
+//        itemBean.describe = SPUtils.getInstance(App.app).getString(Constant.APP_LANGUAGE_TITLE, "简体中文");
+        itemBean.describe = "";
         itemBean.button = R.string.button_update;
         itemBean.buttonEnable = true;
         return itemBean;
@@ -295,6 +306,9 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
                     return;
                 }
                 SPUtils.getInstance(App.app).putString(Constant.APP_LANGUAGE, language);
+                Log.d(TAG, "onViewCreatedlanguage1: "+languageBean.language);
+                Log.d(TAG, "onViewCreatedlanguage1: "+findLanguageIndex(languageBean.language));
+                SharedPreferencesUtils.setParam(Name.LANGUAGE_TYPE2, findLanguageIndex(languageBean.language));
                 SPUtils.getInstance(App.app).putString(Constant.APP_LANGUAGE_TITLE, languageBean.title);
                 showToast(getString(R.string.setting_technology_sn_update));
                 AndroidSchedulers.mainThread().scheduleDirect(new Runnable() {
@@ -307,7 +321,14 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
             }
         }).show();
     }
-
+    public static int findLanguageIndex(String targetLanguage) {
+        for (int i = 0; i < language.length; i++) {
+            if (language[i].equals(targetLanguage)) {
+                return i; // 返回找到的索引
+            }
+        }
+        return 0;
+    }
 
     private static long lastClickTime = 0;
 
@@ -493,12 +514,13 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
                     UpdatePasswordActivity.startActivity(getContext(), sale);
                     break;
                 case ACTION_LANGUAGE:
-                    Log.d(TAG, "onClick:ACTION_LANGUAGE "+languages);
-                    if (isFastDoubleShake()) {
-                        showLanguageSelectDialog();
-                    } else {
-                        showToast("请稍等片刻");
-                    }
+//                    Log.d(TAG, "onClick:ACTION_LANGUAGE "+languages);
+//                    if (isFastDoubleShake()) {
+//                        showLanguageSelectDialog();
+//                    } else {
+//                        showToast("请稍等片刻");
+//                    }
+                    gotoActivity(LanguageActivity.class);
                     break;
                 case ACTION_IGNORE:
                     SPUtils.getInstance(App.app).putBoolean(Constant.LOCK_IN_ERROR,
@@ -1232,4 +1254,11 @@ private final ArrayList<LanguageBean> languages = new ArrayList<>(Arrays.asList(
                     }
                 });
     }
+
+
+    private void gotoActivity(Class activity) {
+        Intent intent = new Intent(getContext(), activity);
+        startActivity(intent);
+    }
+
 }

+ 115 - 0
app/src/main/java/com/bgy/autosale/utils/FlowRadioGroup.java

@@ -0,0 +1,115 @@
+package com.bgy.autosale.utils;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.RadioGroup;
+
+public class FlowRadioGroup extends RadioGroup {
+    public FlowRadioGroup(Context context) {
+        super(context);
+    }
+
+    public FlowRadioGroup(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+
+        //调用ViewGroup的方法,测量子view
+        measureChildren(widthMeasureSpec, heightMeasureSpec);
+
+        //最大的宽
+        int maxWidth = 0;
+        //累计的高
+        int totalHeight = 0;
+
+        //当前这一行的累计行宽
+        int lineWidth = 0;
+        //当前这行的最大行高
+        int maxLineHeight = 0;
+        //用于记录换行前的行宽和行高
+        int oldHeight;
+        int oldWidth;
+
+        int count = getChildCount();
+        //假设 widthMode和heightMode都是AT_MOST
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            MarginLayoutParams params = (MarginLayoutParams) child.getLayoutParams();
+            //得到这一行的最高
+            oldHeight = maxLineHeight;
+            //当前最大宽度
+            oldWidth = maxWidth;
+
+            int deltaX = child.getMeasuredWidth() + params.leftMargin + params.rightMargin;
+            if (lineWidth + deltaX + getPaddingLeft() + getPaddingRight() > widthSize) {//如果折行,height增加
+                //和目前最大的宽度比较,得到最宽。不能加上当前的child的宽,所以用的是oldWidth
+                maxWidth = Math.max(lineWidth, oldWidth);
+                //重置宽度
+                lineWidth = deltaX;
+                //累加高度
+                totalHeight += oldHeight;
+                //重置行高,当前这个View,属于下一行,因此当前最大行高为这个child的高度加上margin
+                maxLineHeight = child.getMeasuredHeight() + params.topMargin + params.bottomMargin;
+
+            } else {
+                //不换行,累加宽度
+                lineWidth += deltaX;
+                //不换行,计算行最高
+                int deltaY = child.getMeasuredHeight() + params.topMargin + params.bottomMargin;
+                maxLineHeight = Math.max(maxLineHeight, deltaY);
+            }
+            if (i == count - 1) {
+                //前面没有加上下一行的搞,如果是最后一行,还要再叠加上最后一行的最高的值
+                totalHeight += maxLineHeight;
+                //计算最后一行和前面的最宽的一行比较
+                maxWidth = Math.max(lineWidth, oldWidth);
+            }
+        }
+        //加上当前容器的padding值
+        maxWidth += getPaddingLeft() + getPaddingRight();
+        totalHeight += getPaddingTop() + getPaddingBottom();
+        setMeasuredDimension(widthMode == MeasureSpec.EXACTLY ? widthSize : maxWidth,
+                heightMode == MeasureSpec.EXACTLY ? heightSize : totalHeight);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        int count = getChildCount();
+        //pre为前面所有的child的相加后的位置
+        int preLeft = getPaddingLeft();
+        int preTop = getPaddingTop();
+        //记录每一行的最高值
+        int maxHeight = 0;
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            MarginLayoutParams params = (MarginLayoutParams) child.getLayoutParams();
+            //r-l为当前容器的宽度。如果子view的累积宽度大于容器宽度,就换行。
+            if (preLeft + params.leftMargin + child.getMeasuredWidth() + params.rightMargin + getPaddingRight() > (r - l)) {
+                //重置
+                preLeft = getPaddingLeft();
+                //要选择child的height最大的作为设置
+                preTop = preTop + maxHeight;
+                maxHeight = getChildAt(i).getMeasuredHeight() + params.topMargin + params.bottomMargin;
+            } else { //不换行,计算最大高度
+                maxHeight = Math.max(maxHeight, child.getMeasuredHeight() + params.topMargin + params.bottomMargin);
+            }
+            //left坐标
+            int left = preLeft + params.leftMargin;
+            //top坐标
+            int top = preTop + params.topMargin;
+            int right = left + child.getMeasuredWidth();
+            int bottom = top + child.getMeasuredHeight();
+            //为子view布局
+            child.layout(left, top, right, bottom);
+            //计算布局结束后,preLeft的值
+            preLeft += params.leftMargin + child.getMeasuredWidth() + params.rightMargin;
+        }
+    }
+}

二进制
app/src/main/res/drawable/btn_qxxuanzhong.png


+ 507 - 0
app/src/main/res/layout/activity_language.xml

@@ -0,0 +1,507 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:focusable="true"
+    android:focusableInTouchMode="true">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        tools:context=".LanguageActivity">
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <android.support.v7.widget.AppCompatImageView
+                android:id="@+id/setting_back"
+                android:layout_width="@dimen/dp_35"
+                android:layout_height="@dimen/dp_35"
+                android:layout_marginStart="@dimen/dp_26"
+                android:layout_marginTop="@dimen/dp_26"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:srcCompat="@drawable/vector_btn_back" />
+        </RelativeLayout>
+
+        <ScrollView
+            android:id="@+id/scrollView"
+            android:layout_width="@dimen/dp_500"
+            android:layout_height="@dimen/dp_260"
+            android:layout_centerHorizontal="true"
+            android:layout_marginStart="@dimen/dp_10"
+            android:layout_marginTop="@dimen/dp_40">
+
+            <com.bgy.autosale.utils.FlowRadioGroup
+                android:id="@+id/fl_language"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+                <RadioButton
+                    android:id="@+id/rb_chinese"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:background="@drawable/selector_language_bg"
+                    android:text="@string/chinese"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_english"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:background="@drawable/selector_language_bg"
+                    android:gravity="center"
+                    android:text="@string/english"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_german"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:background="@drawable/selector_language_bg"
+                    android:gravity="center"
+                    android:text="Deutsch(德语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_russia"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="русский язык(俄语)"
+                    android:textSize="@dimen/dp_12" />
+
+
+                <RadioButton
+                    android:id="@+id/rb_japanese"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_alignStart="@+id/rg_language2"
+                    android:layout_alignTop="@+id/rg_language2"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="日本語(日语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_Spanish"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginStart="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:background="@drawable/selector_language_bg"
+                    android:text="Español(西班牙语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_french"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Français(法语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_bulgaria"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="България(保加利亚语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_danmai"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Dansk(丹麦语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_fenlan"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Suomalainen(芬兰语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_helan"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Nederlands(荷兰语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_jieke"
+                    android:layout_width="@dimen/dp_68"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Česky(捷克语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_luomaniya"
+                    android:layout_width="@dimen/dp_68"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Românesc(罗马尼亚语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_nuowei"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Norsk språk(挪威语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_putaoya"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:background="@drawable/selector_language_bg"
+                    android:gravity="center"
+                    android:text="Português(葡萄牙语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_ruishi"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:background="@drawable/selector_language_bg"
+                    android:gravity="center"
+                    android:text="Svenska(瑞典语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_sifaluoke"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Slovenského jazyk(斯洛伐克语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_xiongyali"
+                    android:layout_width="@dimen/dp_68"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Magyar(匈牙利语)"
+                    android:textSize="@dimen/dp_12" />
+
+
+                <RadioButton
+                    android:id="@+id/rb_yidali"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:background="@drawable/selector_language_bg"
+                    android:text="Lingua italiana(意大利语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_taiwang"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="繁体中文"
+                    android:textSize="@dimen/dp_12" />
+
+
+                <RadioButton
+                    android:id="@+id/rb_hany"
+                    android:layout_width="@dimen/dp_68"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="한국어(韩语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_bolan"
+                    android:layout_width="@dimen/dp_68"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Polska(波兰语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_wukelan"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Ukrainian(乌克兰语)"
+                    android:textSize="@dimen/dp_12" />
+
+                <RadioButton
+                    android:id="@+id/rb_ymny"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:background="@drawable/selector_language_bg"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Հայաստան(亚美尼亚语)"
+                    android:textSize="@dimen/dp_12" />
+
+
+                <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_alb"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="عرب(阿拉伯语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_tg"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="ไทย(泰语)"
+                    android:textSize="@dimen/dp_12" />
+
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_ysl"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="(希伯来语)יִשׂרְאֵלִ"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_brazil2"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Brasil-2DHR(巴西语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_gljy"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="საქართველოს(格鲁吉亚语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_brazil3"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Brasil-3(巴西语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_turkey"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Türkiye(土耳其语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_latvia"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Latvija(拉脱维亚语)"
+                    android:textSize="@dimen/dp_12" />
+
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_portugal_ra"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Portugal RA(葡萄牙语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_eesti"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Eesti(爱沙尼亚)"
+                    android:textSize="@dimen/dp_12" />
+
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_mgy"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="Монгол(蒙古语)"
+                    android:textSize="@dimen/dp_12" />
+
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_bsy"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="فارسی(波斯语)"
+                    android:textSize="@dimen/dp_12" />
+               <RadioButton
+                    android:background="@drawable/selector_language_bg"
+                    android:id="@+id/rb_hsky"
+                    android:layout_width="@dimen/dp_68"
+                    android:layout_height="@dimen/dp_84"
+                    android:layout_marginLeft="@dimen/dp_18"
+                    android:layout_marginBottom="@dimen/dp_10"
+                    android:button="@null"
+                    android:gravity="center"
+                    android:text="қазақ(哈萨克语)"
+                    android:textSize="@dimen/dp_12" />
+            </com.bgy.autosale.utils.FlowRadioGroup>
+        </ScrollView>
+
+
+        <Button
+            android:id="@+id/btn_reset"
+            android:layout_width="@dimen/dp_186"
+            android:layout_height="@dimen/dp_26"
+            android:layout_alignParentBottom="true"
+            android:layout_centerHorizontal="true"
+            android:layout_marginBottom="@dimen/dp_10"
+            android:background="@drawable/shape_btn_back"
+            android:text="@string/reset"
+            android:textColor="@color/black_home"
+            android:textSize="@dimen/dp_10" />
+
+
+
+    </RelativeLayout>
+
+</layout>

+ 70 - 1
app/src/main/res/layout/activity_system_switch_setting.xml

@@ -23,9 +23,9 @@
     </RelativeLayout>
 
     <LinearLayout
-        android:layout_marginTop="@dimen/dp_20"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:layout_marginTop="@dimen/dp_20"
         android:orientation="vertical"
         tools:ignore="MissingConstraints">
 
@@ -71,6 +71,75 @@
                     android:textSize="@dimen/sp_8" />
             </RadioGroup>
         </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:layout_marginTop="@dimen/dp_20">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_20"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:gravity="right"
+                android:text="@string/language_2"
+                android:textColor="#576478"
+                android:textSize="@dimen/dp_10" />
+
+            <Spinner
+                android:id="@+id/sp_language_2"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="@dimen/dp_20"
+                android:layout_marginBottom="@dimen/dp_10" />
+
+            <Button
+                android:visibility="gone"
+                android:id="@+id/btn_language_2"
+                android:layout_width="@dimen/dp_44"
+                android:layout_height="@dimen/dp_22"
+                android:layout_marginLeft="@dimen/dp_20"
+                android:layout_marginBottom="@dimen/dp_10"
+                android:background="@drawable/shape_message_normal"
+                android:text="@string/update"
+                android:textColor="#333"
+                android:textSize="@dimen/dp_8" />
+
+        </LinearLayout>
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center">
+
+            <RadioGroup
+                android:id="@+id/rg_select_language"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal">
+
+                <RadioButton
+                    android:id="@+id/rb_language_yes"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_26"
+                    android:gravity="center"
+                    android:text="@string/setting_switch_on"
+                    android:textColor="#576478"
+                    android:textSize="@dimen/sp_8" />
+
+                <RadioButton
+                    android:id="@+id/rb_language_no"
+                    android:layout_width="@dimen/dp_60"
+                    android:layout_height="@dimen/dp_26"
+                    android:layout_marginLeft="@dimen/dp_20"
+                    android:gravity="center"
+                    android:text="@string/setting_switch_off"
+                    android:textColor="#576478"
+                    android:textSize="@dimen/sp_8" />
+            </RadioGroup>
+        </LinearLayout>
     </LinearLayout>
 
 </android.support.constraint.ConstraintLayout>

+ 8 - 6
app/src/main/res/layout/dialog_credit_card.xml

@@ -9,7 +9,7 @@
         >
 
         <LinearLayout
-            android:layout_width="@dimen/dp_320"
+            android:layout_width="445dp"
             android:layout_height="@dimen/dp_220"
             android:layout_gravity="center"
             android:background="@drawable/shape_white_bg"
@@ -25,8 +25,9 @@
 
             <LinearLayout
 
-                android:layout_width="match_parent"
+                android:layout_width="331dp"
                 android:layout_height="wrap_content"
+                android:layout_gravity="center"
                 android:orientation="vertical">
                 <!--android:src="@color/colorBg"-->
                 <ImageView
@@ -61,7 +62,8 @@
                     android:id="@+id/rl_time"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal">
+                    android:layout_gravity="center_horizontal"
+                    android:layout_marginBottom="@dimen/dp_10">
 
                     <TextView
                         android:id="@+id/tv_time"
@@ -77,7 +79,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="@dimen/dp_15"
-                        android:layout_toRightOf="@id/tv_time"
+                        android:layout_toEndOf="@id/tv_time"
                         android:text="@string/second"
                         android:textColor="@color/colorBg"
                         android:textSize="@dimen/sp_7" />
@@ -87,7 +89,7 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:layout_marginTop="@dimen/dp_15"
-                        android:layout_toRightOf="@id/tv_second"
+                        android:layout_toEndOf="@id/tv_second"
                         android:text="@string/guanbi"
                         android:textColor="@color/colorHint"
                         android:textSize="@dimen/sp_7" />
@@ -99,7 +101,7 @@
                     android:layout_width="@dimen/dp_106"
                     android:layout_height="@dimen/dp_23"
                     android:layout_gravity="center_horizontal"
-                    android:layout_marginTop="@dimen/dp_10"
+                    android:layout_marginTop="@dimen/dp_2"
                     android:background="@drawable/shape_btn_update_green"
                     android:text="@string/cancel"
                     android:textSize="@dimen/sp_8" />

+ 69 - 0
app/src/main/res/layout/fragment_ice_cream.xml

@@ -439,6 +439,75 @@
             </LinearLayout>
 
         </RelativeLayout>
+        <RelativeLayout
+            android:id="@+id/rl_select_language"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="gone"
+            android:layout_gravity="right"
+            android:layout_marginRight="@dimen/dp_20"
+            android:layout_marginTop="@dimen/dp_260">
+
+            <LinearLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:orientation="vertical">
+                <LinearLayout
+                    android:id="@+id/ll_sigin"
+                    android:layout_width="@dimen/dp_57"
+                    android:layout_height="@dimen/dp_26"
+                    android:background="@drawable/shape_radio_signin"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/tv_arab"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/shape_radio_signin_language"
+                        android:gravity="center"
+                        android:padding="@dimen/dp_4"
+                        android:text="未选择"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/sp_8" />
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_sigin1"
+                    android:layout_width="@dimen/dp_57"
+                    android:layout_height="@dimen/dp_26"
+                    android:layout_marginTop="@dimen/dp_4"
+                    android:background="@drawable/shape_radio_signin"
+                    android:gravity="center"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/tv_english"
+                        android:layout_width="@dimen/dp_47"
+                        android:layout_height="wrap_content"
+                        android:background="@drawable/shape_radio_signin_language"
+                        android:gravity="center"
+                        android:padding="@dimen/dp_4"
+                        android:text="主语言"
+                        android:textColor="@color/white"
+                        android:textSize="@dimen/sp_8" />
+                </LinearLayout>
+
+                <TextView
+                    android:id="@+id/ll_english_message"
+                    android:layout_width="@dimen/dp_57"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@id/ll_sigin1"
+                    android:layout_alignParentRight="true"
+                    android:gravity="center"
+                    android:text="choose language"
+                    android:textColor="@color/white"
+                    android:textSize="@dimen/sp_8" />
+            </LinearLayout>
+
+        </RelativeLayout>
 
     </FrameLayout>
 

+ 1 - 0
app/src/main/res/layout/fragment_main.xml

@@ -2,6 +2,7 @@
 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/main_fragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 

+ 1 - 1
app/src/main/res/values-ar/strings.xml

@@ -492,6 +492,6 @@
     <string name="nayax_pay_icon_choice">تبديل رمز الدفع Nayax</string>
     <string name="ic_icon_text">تغيير نص أيقونة الآيس كريم</string>
     <string name="credit_card_text_description">الوصف النصي لبطاقة الائتمان</string>
-
+    <string name="function_switch_setting">مفتاح إعداد الوظيفة</string>
 </resources>
 <!--阿拉伯语-->

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

@@ -495,6 +495,7 @@
     <string name="nayax_pay_icon_choice">Přepínač platební ikony Nayax</string>
     <string name="ic_icon_text">Změna textu ikony zmrzliny</string>
     <string name="credit_card_text_description">Textový popis kreditní karty</string>
+    <string name="function_switch_setting">Přepínač nastavení funkcí</string>
 
 </resources>
 <!--捷克语-->

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

@@ -496,6 +496,7 @@
     <string name="nayax_pay_icon_choice">Nayax-Zahlungssymbolwechsel</string>
     <string name="ic_icon_text">Änderung des Textes des Eiscreme-Symbols</string>
     <string name="credit_card_text_description">Textbeschreibung der Kreditkarte</string>
+    <string name="function_switch_setting">Funktionseinstellungsschalter</string>
 
 </resources>
 <!--德语-->

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

@@ -496,6 +496,7 @@
     <string name="nayax_pay_icon_choice">Nayax payment icon switch</string>
     <string name="ic_icon_text">Ice cream icon text change</string>
     <string name="credit_card_text_description">Credit card text description</string>
+    <string name="function_switch_setting">Function setting switch</string>
 
 </resources>
 <!--英语-->

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

@@ -499,6 +499,7 @@
 
     <string name="ic_icon_text">Cambio de texto del icono de helado</string>
     <string name="credit_card_text_description">Descripción del texto de la tarjeta de crédito</string>
+    <string name="function_switch_setting">Interruptor de configuración de función</string>
 
 </resources>
 <!--西班牙语-->

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

@@ -494,6 +494,7 @@
     <string name="nayax_pay_icon_choice">Nayaxi makseikooni lüliti</string>
     <string name="ic_icon_text">Jäätiseikooni teksti muutmine</string>
     <string name="credit_card_text_description">Krediitkaardi teksti kirjeldus</string>
+    <string name="function_switch_setting">Funktsiooniseadete lüliti</string>
 
 </resources>
 <!--爱沙尼亚语-->

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

@@ -0,0 +1,505 @@
+<resources>
+<string name="setting_technology_language_describe">Français</string>
+    <!-- 配置差分的主app名称-->
+
+    <string name="app_name">Machine à glace</string>
+    <string name="bd" translationable="false">19900521</string>
+    <string name="un" translatable="false">ChenJinXu</string>
+    <string name="pos_no_ready" translatable="false">Le périphérique POS n\'est pas prêt !</string>
+    <string name="pay_way_tip_marshall" translatable="false">Veuillez finaliser votre paiement sur le point de vente.</string>
+    <string name="pay_error_pos" translatable="false">Autorisation refusée</string>
+    <string name="cache_file_name" translatable="false">Crème glacée</string>
+    <string name="error_device_clean">Périphérique à nettoyer</string>
+    <string name="initiate_device" translatable="false">initialiser le périphérique POS</string>
+
+    <!--Module de communication -->
+    <string name="plc_send_action_again">Renvoyer la commande >>> </string>
+    <string name="plc_connect_status" formatted="false">Connexion : %s ; Description : %s</string>
+    <string name="plc_header_length_error">Erreur de longueur d\'en-tête : %d</string>
+    <string name="plc_header_error" formatted="false">Erreur d\'informations d\'en-tête : %d != %d ; Données d\'origine : %s %s</string>
+    <string name="plc_message_length_error" formatted="false">Erreur de longueur de message standard : %d</string>
+    <string name="plc_body_empty">Aucune information sur le contenu du corps</string>
+    <string name="plc_body_length_error" formatted="false">Erreur de longueur du contenu : %d != %d</string>
+
+    <string name="plc_disconnect_initiative">Déconnecter activement le client</string>
+    <string name="plc_disconnect">Déconnexion du périphérique</string>
+    <string name="plc_has_other_order">L\'appareil n\'a pas traité la dernière commande >> </string>
+    <string name="plc_send_order_again">Réessayez d\'envoyer la commande >> </string>
+    <string name="plc_make_error_not_status">L\'équipement n\'a pas signalé l\'état de production, ce qui a entraîné une livraison anormale des repas >> </string>
+    <string name="plc_message_body_empty">Le contenu du message est vide ! </string>
+    <string name="plc_order_empty">Le contenu de la commande a été effacé !</string>
+    <string name="plc_order_result_empty">La longueur du contenu du résultat de la commande est incorrecte !</string>
+    <string name="plc_order_start">Prêt à commencer à faire de la glace : %s</string>
+    <string name="plc_order_making">Sous-commande en cours de diffusion : %s</string>
+    <string name="plc_order_prepare">Commande à récupérer : %s</string>
+    <string name="plc_order_taked">La commande a été prise : %s</string>
+    <string name="plc_order_busy">Statut occupé : %s</string>
+    <string name="plc_order_error">Échec de la livraison de la sous-commande !</string>
+    <string name="plc_order_error2">Exception de livraison de repas !</string>
+    <string name="plc_prepare">L\'appareil est prêt à recevoir les commandes !</string>
+    <string name="plc_not_order">Aucune information de commande !</string>
+    <string name="plc_order_receive">Commande reçue >> %s</string>
+    <string name="plc_order_no_response">Aucune réponse lors de la passation de commande !</string>
+
+    <!-- Page de publicité -->
+    <string name="guide_touch">Commande d\'écran tactile</string>
+    <string name="no_ready">Statut de vente anormal</string>
+    <string name="is_in_sale_view">Veuillez quitter la page de commande et réessayer. </string>
+    <string name="is_in_get_dishes_info">Obtention d\'informations sur le produit~</string>
+    <string name="is_click_too_fast">Cliqué trop vite~</string>
+    <string name="is_used_code">Il n\'y a aucune glace à préparer pour cette commande</string>
+    <string name="is_invalid_code">Oups, votre code QR n\'est pas valide, veuillez contacter le serveur~</string>
+    <string name="check_fail">Échec de l\'interrogation de la commande</string>
+    <string name="guide_text_1" formatted="false">Il semble qu\'il vous manque une tasse de glace, venez l\'essayer~</string>
+    <string name="guide_text_2">Bonjour, je pense que tu veux manger de la glace~</string>
+
+    <!-- Page de commande -->
+    <string name="price_unit">¥</string>
+    <string name="ice_cream">Crème glacée</string>
+    <string name="buy_too_much">Limité à 6 tasses à la fois ! </string>
+    <string name="no_dishes_info">Échec de l\'obtention des informations sur le produit ! </string>
+    <string name="flavor_original">Glace originale</string>
+    <string name="flavor_original_hw">Glace originale</string>
+    <string name="flavor_multi">Glace multi-saveurs</string>
+    <string name="flavor_sauce">Ajouter de la confiture +</string>
+    <string name="flavor_kernel">+ choisir le noyau</string>
+    <string name="shop_cart_add">Ajouter au panier</string>
+    <string name="make_now">Créer maintenant</string>
+    <string name="shop_cart">Panier</string>
+    <string name="shop_cart_pay">Aller au paiement</string>
+    <string name="shop_cart_price" formatted="false">Total %d tasses, total %1s%2s</string>
+    <string name="shop_cart_half_price_tip">Glace des mêmes spécifications, la seconde peut bénéficier d\'une réduction à moitié prix ! </string>
+    <string name="peanut">Cacahuète</string>
+    <string name="filbert">Noisette</string>
+    <string name="cashew">Noix de cajou</string>
+    <string name="pineapple">Ananas</string>
+    <string name="strawberry">Fraise</string>
+    <string name="blueberry">Myrtille</string>
+    <string name="mango">Mangue</string>
+    <string name="chocolates">Chocolat</string>
+    <string name="oreo">Oréo</string>
+    <string name="flavor_invalid">Aucun</string>
+    <string name="flavor_stock_empty">Épuisé</string>
+    <string name="spec_stock_empty">%s est en rupture de stock</string>
+    <string name="spec_invalid">%s a été retiré des étagères</string>
+    <string name="flavor_stock">%d tasses restantes</string>
+    <string name="material_milk">Lait</string>
+    <string name="material_cup">tasse</string>
+
+    <!-- Page de paiement -->
+    <string name="pay_init_error">Le panier a été vidé, veuillez repasser une commande</string>
+    <string name="pay_close">Fermer automatiquement après %ds</string>
+    <string name="pay_go">Veuillez payer</string>
+    <string name="pay_price">Paiement total réel :</string>
+    <string name="pay_way_tip">Veuillez ouvrir WeChat/Alipay et scanner le code QR pour payer</string>
+    <string name="pay_way_tip2">Veuillez placer le code de paiement sous le scanner de code pour finaliser le paiement</string>
+    <string name="pay_way">Mode de paiement :</string>
+    <string name="pay_way_wechat">WeChat</string>
+    <string name="pay_way_alipay">Alipay</string>
+    <string name="paying_tip">Conseil de paiement</string>
+    <string name="paying_close">Annuler automatiquement la commande après %ds</string>
+    <string name="paying_describe">Paiement en cours, veuillez patienter...</string>
+    <string name="paying_success_tip">Paiement réussi, la commande est en cours de traitement...</string>
+    <string name="paying_fail_tip">Échec du paiement, veuillez réessayer</string>
+    <string name="paying_back">Retourner à la page précédente,</string>
+    <string name="paying_again">Payer à nouveau</string>
+    <string name="pay_way_only">Prend uniquement en charge les paiements WeChat et Alipay</string>
+    <string name="pay_time_out">Aucun paiement dû après timeout, fermez l\'interface</string>
+    <string name="pay_cancel">Annuler le paiement et fermer l\'interface</string>
+
+    <!-- Page de restauration -->
+    <string name="error_plc_order_err">Échec de la commande</string>
+    <string name="take_tip">Conseils pour la prise de repas</string>
+    <string name="take_back">Retour à la page d\'accueil</string>
+    <string name="pay_success">Paiement réussi</string>
+    <string name="order_complete">Commande terminée</string>
+    <string name="make_describe_ing">Votre glace est en cours de préparation, veuillez patienter...</string>
+    <string name="make_ing">Préparation des repas</string>
+    <string name="take_describe_complete">Votre glace est terminée, veuillez la récupérer au plus vite ! </string>
+    <string name="take_complete">Veuillez prendre le repas</string>
+    <string name="take_describe_close">Le port de prise de nourriture se ferme, veuillez faire attention. </string>
+    <string name="take_close">Réinitialisation</string>
+    <string name="take_describe_finish">Commande terminée, bienvenue pour une prochaine visite~</string>
+    <string name="take_finish">Pris</string>
+    <string name="make_fail_tip">Ah, désolé~la création a échoué</string>
+    <string name="make_fail_describe">Si vous avez des questions, veuillez contacter le service client~</string>
+    <string name="make_fail_describe_refund">Les glaces non faites seront remboursées de la même manière. Si vous avez des questions, veuillez contacter le service client~</string>.
+
+    <!-- Connexion back-end -->
+    <string name="auth_login_type_scan">Scannez le code pour vous connecter</string>
+    <string name="auth_login_type_phone">Connexion par numéro de téléphone portable</string>
+    <string name="auth_login_type_phone_hint">Veuillez saisir votre numéro de téléphone portable</string>
+    <string name="auth_login_type_pwd_hint">Mot de passe dynamique</string>
+    <string name="auth_login_type_pwd_get_way">Afficher la méthode d\'acquisition de mot de passe dynamique >></string>
+    <string name="auth_login_return">Retour à l\'écran de commande</string>
+    <string name="auth_login_confirm">Connexion</string>
+    <string name="auth_login_scan_hint">Veuillez présenter le code QR de connexion et placez-le sur le port de numérisation</string>
+    <string name="auth_login_scan_code_get_way">Afficher la méthode d\'acquisition du code QR de connexion >></string>
+    <string name="auth_login_fail">L\'authentification de connexion a échoué ! </string>
+    <string name="auth_login_understand">Compris</string>
+    <string name="operate_reason_title">Veuillez sélectionner la raison de l\'opération</string>
+
+    <!-- Gestion du back-end -->
+    <string name="auth_old_pwd">Veuillez saisir le mot de passe d\'origine</string>
+    <string name="auth_old_pwd_fail">Erreur de vérification du mot de passe d\'origine</string>
+    <string name="auth_new_pwd">Veuillez saisir un nouveau mot de passe</string>
+    <string name="auth_new_pwd_again">Veuillez saisir à nouveau le nouveau mot de passe</string>
+    <string name="auth_new_pwd_different">Les deux nouveaux mots de passe sont incohérents, veuillez ressaisir le nouveau mot de passe</string>
+    <string name="auth_new_pwd_success">Modification réussie</string>
+    <string name="auth_fail">L\'authentification a échoué !</string>
+    <string name="ice_cream_setting">Paramètres de la machine à glace</string>
+    <string name="return_start">Retour à la commande</string>
+    <string name="exit_app">Quitter l\'application</string>
+    <string name="guide_video">Guide d\'utilisation\nVidéo d\'opération</string>
+
+    <string name="setting_temperature_anomaly">Anormalité de température</string>
+    <string name="realtime_warnings">Informations en temps réel :</string>
+    <string name="setting_common">Paramètres opérationnels</string>
+    <string name="setting_warnings">Enregistrement d\'avertissement</string>
+    <string name="setting_machine">Gestion des machines</string>
+    <string name="setting_switch">Paramètre du mode</string>
+    <string name="setting_price">Plan de vente</string>
+    <string name="error_plc_disconnect">Appareil non connecté</string>
+    <string name="setting_select_manual">Veuillez d\'abord mettre l\'appareil en état manuel ! </string>
+    <string name="setting_plc_connect">Connecté</string>
+    <string name="setting_plc_un_connect">Non connecté</string>
+    <string name="setting_common_reset">Réinitialiser</string>
+    <string name="setting_common_manual">Manuel</string>
+    <string name="setting_common_auto">Auto</string>
+    <string name="setting_common_clean">Nettoyage des machines</string>
+    <string name="setting_common_check">Vérification du fonctionnement</string>
+    <string name="setting_common_order">Commande manuelle</string>
+    <string name="setting_common_config">Configuration des paramètres</string>
+    <string name="setting_version_un_support">La version actuelle du MCU ne prend pas en charge cette fonction</string>
+    <string name="setting_reset_ing">Réinitialisation</string>
+    <string name="setting_reset_success">Réinitialisation réussie</string>
+    <string name="setting_reset_fail">Échec de la réinitialisation</string>
+    <string name="setting_check_prepare">Veuillez d\'abord effacer l\'exception de périphérique ! </string>
+    <string name="setting_plc_send_ing">Envoi...</string>
+    <string name="setting_plc_send_success">Envoyé avec succès ! </string>
+    <string name="setting_plc_send_fail">L\'envoi a échoué ! </string>
+    <string name="setting_plc_send_busy">Traitement d\'autres instructions~</string>
+
+    <string name="setting_control_device">Gestion des machines</string>
+    <string name="setting_control_cut_down">Économie d\'énergie et fraîcheur</string>
+    <string name="setting_control_power_on">Mise sous tension</string>
+    <string name="setting_control_refrigeration">Auto (refroidissement)</string>
+    <string name="setting_control_keep_fresh">Mode nuit (frais)</string>
+    <string name="setting_control_clean_mode">Nettoyage des prises</string>
+    <string name="setting_control_keep_device">Veille</string>
+    <string name="setting_control_sauce_1">Gestion du Jam 1</string>
+    <string name="setting_control_sauce_2">Gestion du Jam 2</string>
+    <string name="setting_control_sauce_3">Gestion du Jam 3</string>
+    <string name="setting_control_kernel_1">Gestion Guoshan 1</string>
+    <string name="setting_control_kernel_2">Gestion de Guoshan 2</string>
+    <string name="setting_control_kernel_3">Gestion de Guoshan 3</string>
+    <string name="setting_control_positive">positif</string>
+    <string name="setting_control_negative">Tirage inversé</string>
+    <string name="setting_control_stop">Arrêter</string>
+    <string name="setting_control_open">Ouvrir</string>
+    <string name="setting_control_close">Fermer</string>
+    <string name="setting_control_cut_down_tip">Éteindre toutes les sources d\'alimentation sauf la fraîcheur ?</string>
+    <string name="setting_control_cut_down_success">Entrez en mode d\'économie d\'énergie après 5 secondes</string>
+
+
+    <string name="setting_switch_on">Activé</string>
+    <string name="setting_switch_off">Désactivé</string>
+    <string name="setting_technology_version">Version actuelle : %s</string>
+    <string name="setting_technology_version_not_new">Aucune dernière version</string>
+    <string name="setting_technology_version_new">Dernière version : %s</string>
+    <string name="setting_technology_version_update">Mise à jour</string>
+    <string name="setting_technology_num">Numéro d\'usine</string>
+    <string name="setting_technology_num_reset">Réinitialiser</string>
+    <string name="setting_technology_system_reset">Restaurer les paramètres d\'usine</string>
+    <string name="setting_technology_update_pwd">Changer le mot de passe</string>
+    <string name="setting_technology_upload_log">Journal du programme</string>
+    <string name="setting_technology_clean_config">Configuration du nettoyage</string>
+    <string name="setting_technology">Support technique</string>
+    <string name="setting_technology_upload_success">Téléchargement réussi</string>
+    <string name="setting_technology_mcu_debug">Débogage MCU</string>
+    <string name="setting_technology_mcu_debug_fail">Échec du démarrage, veuillez installer l\'application de débogage</string>
+    <string name="setting_technology_language">Langage de programmation</string>
+    <string name="setting_technology_sn_input">Veuillez saisir le numéro réel de l\'appareil</string>
+    <string name="setting_technology_sn_update">Redémarrez automatiquement l\'application après 5 secondes pour prendre effet ! </string>
+    <string name="setting_technology_debug">Mode débogage</string>
+
+
+    <string name="setting_run_mode">Mode d\'exécution</string>
+    <string name="setting_run_online">Mode en ligne</string>
+    <string name="setting_run_offline">Mode hors ligne</string>
+    <string name="setting_pay_mode">Mode de paiement</string>
+    <string name="setting_pay_free">Mode gratuit</string>
+    <string name="setting_pay_pos">Swiper de carte MDB</string>
+    <string name="setting_pay_online">Mode de paiement en ligne</string>
+
+    <string name="setting_clean_title">Configuration du nettoyage</string>
+    <string name="setting_clean_switch">Activer les restrictions de nettoyage</string>
+    <string name="setting_lock_switch">Verrou non nettoyé</string>
+    <string name="setting_clean_schedule_day">Cycle de nettoyage (jours)</string>
+    <string name="setting_clean_warn_first_time">Délai d\'avance du premier avertissement (heures)</string>
+    <string name="setting_clean_warn_second_time">Délai d\'avance du réavertissement (heures)</string>
+    <string name="setting_clean_warn_last_time">Durée du dernier avertissement (heures)</string>
+
+    <string name="setting_icecream_title">Crème glacée</string>
+    <string name="setting_icecream_name">Glace originale</string>
+    <string name="setting_icecream_price">Prix de la glace</string>
+    <string name="setting_kernel_title_1">Fruits concassés (1)</string>
+    <string name="setting_kernel_title_2">Fruits concassés (2)</string>
+    <string name="setting_kernel_name_1">Nom du fruit (1)</string>
+    <string name="setting_kernel_name_2">Nom du fruit (2)</string>
+    <string name="setting_kernel_price_1">Prix des fruits écrasés (1)</string>
+    <string name="setting_kernel_price_2">Prix des fruits écrasés (2)</string>
+    <string name="setting_sauce_title_1">Confiture(1)</string>
+    <string name="setting_sauce_title_2">Confiture(2)</string>
+    <string name="setting_sauce_title_3">Confiture (3)</string>
+    <string name="setting_sauce_name_1">Nom de la confiture (1)</string>
+    <string name="setting_sauce_name_2">Nom de la confiture (2)</string>
+    <string name="setting_sauce_name_3">Nom de la confiture (3)</string>
+    <string name="setting_sauce_price_1">Prix de la confiture (1)</string>
+    <string name="setting_sauce_price_2">Prix de la confiture (2)</string>
+    <string name="setting_sauce_price_3">Prix de la confiture (3)</string>
+
+    <string name="setting_clean_countdown_time">Compte à rebours de nettoyage :</string>
+    <string name="setting_clean_countdown_time_hour">Heure</string>
+    <string name="setting_clean_countdown_time_minute">Minute</string>
+    <string name="setting_clean_countdown_time_out">Le temps de nettoyage a été dépassé</string>
+    <string name="setting_clean_countdown_error_tip">L\'appareil est en veille</string>
+    <string name="setting_clean_countdown_error_describe">En attente du réveil~</string>
+
+    <string name="setting_clean_recent_time">Heure du dernier nettoyage : %s</string>
+    <string name="setting_clean_stir_time">Durée d\'agitation :</string>
+    <string name="setting_clean_clean_time">Temps de nettoyage actuels du réservoir de matériau : %d</string>
+    <string name="setting_clean_button_pull_stop">Arrêter l\'imbrication</string>
+    <string name="setting_clean_button_pull_start">Démarrer l\'imbrication</string>
+    <string name="setting_clean_button_stir_stop">Arrêtez de remuer</string>
+    <string name="setting_clean_button_stir_start">Commencer à remuer</string>
+    <string name="setting_clean_tip">Il faut 3 minutes pour le premier brassage</string>
+    <string name="setting_clean_describe">Remarques :\n1. Les matériaux ne peuvent être déchargés qu\'en mode agitation\n2. Veuillez égoutter le mélange avant d\'ajouter de l\'eau pour le nettoyage\n3. Veuillez placer la tasse à mesurer directement sous l\'orifice de décharge\n4. le verre doseur est plein depuis 8 minutes, "%s" s\'affichera dans le temps</string>
+    <string name="setting_clean_complete">Nettoyage complet du réservoir</string>
+    <string name="setting_clean_finish">Terminer</string>
+    <string name="setting_clean_finish_tip">Cliquez sur le bouton Terminer une fois le nettoyage terminé</string>
+
+    <string name="setting_operate_check_start">Démarrer la vérification</string>
+    <string name="setting_operate_check_tip">Le périphérique est en cours de vérification...</string>
+    <string name="setting_operate_check_progress_ing">Vérification</string>
+    <string name="setting_operate_check_complete">Vérification terminée</string>
+    <string name="setting_operate_check_complete_return">La vérification est terminée et reviendra automatiquement après 5 secondes</string>
+    <string name="setting_operate_check_exception">Vérifier l\'exception</string>
+    <string name="setting_operate_check_fail">Échec</string>
+
+    <string name="setting_config_sauce_1">Temps de décharge du bourrage 1</string>
+    <string name="setting_config_sauce_2">Temps de décharge du bourrage 2</string>
+    <string name="setting_config_sauce_3">Durée de distribution de la confiture 3</string>
+    <string name="setting_config_kernel_1">Écrasement des fruits 1 temps de décharge</string>
+    <string name="setting_config_kernel_2">Temps de déchargement des fruits écrasés 2</string>
+    <string name="setting_config_kernel_3">Fruit écrasé 3 temps de décharge</string>
+    <string name="setting_config_milk">Temps de décharge du mélange</string>
+    <string name="setting_config_cup">Première tasse</string>
+    <string name="setting_config_free">Temps libre</string>
+    <string name="setting_config_recommend">Paramètres recommandés</string>
+    <string name="setting_config_sauce_1_recommend">Recommander un réglage sur 4 000 ms</string>
+    <string name="setting_config_sauce_2_recommend">Le paramètre recommandé est 3 000 ms</string>
+    <string name="setting_config_sauce_3_recommend">Le paramètre recommandé est 5 000 ms</string>
+    <string name="setting_config_kernel_1_recommend">Le paramètre recommandé est de 1 600 ms</string>
+    <string name="setting_config_kernel_2_recommend">Le paramètre recommandé est de 1 600 ms</string>
+    <string name="setting_config_kernel_3_recommend">Le paramètre recommandé est de 1 600 ms</string>
+    <string name="setting_config_milk_recommend">Le paramètre recommandé est de 2 800 ms</string>
+    <string name="setting_config_cup_recommend">Le paramètre recommandé est de 2 400 ms</string>
+    <string name="setting_config_free_recommend">Recommander un réglage sur 6 min</string>
+
+    <string name="remote_operate_success">Opération réussie</string>
+    <string name="remote_operate_failed">L\'opération a échoué</string>
+    <string name="remote_shutdown_flavor_stock">Mélange insuffisant, échec de l\'opération</string>
+    <string name="remote_shutdown_in_sale">L\'opération a échoué alors que l\'utilisateur commandait de la nourriture</string>
+
+    <!-- Anomalie de l\'équipement -->
+    <string name="error_power_saving">Veille d\'économie d\'énergie</string>
+    <string name="error_wait">L\'appareil n\'est pas entré dans l\'état de vente automatique</string>
+    <string name="error_contact_format" formatted="false">%s-Si vous avez des questions, veuillez contacter le personnel d\'exploitation du magasin (%s)</string>
+    <string name="error_milk_slurry_empty_tip">En attente que le serveur fasse le plein de lait</string>
+    <string name="error_cup_empty_tip">En attente que le serveur remplisse le verre de glace</string>
+    <string name="error_door_un_close">La porte de l\'appareil n\'est pas fermée</string>
+    <string name="error_toke_order_time_out">Délai d\'expiration de la prise en charge des repas</string>
+    <string name="error_milk_slurry_lack">La machine à glace n\'a plus d\'ingrédients</string>
+    <string name="error_cup_lack">Il manque une tasse au compte-gouttes</string>
+    <string name="error_cup_1_lack">Il manque 1 tube de tasse</string>
+    <string name="error_cup_2_lack">Le tube n° 2 tasses est manquant</string>
+    <string name="error_high_pressure">Appuyez sur l\'alarme haute pression</string>
+    <string name="error_nuts_1_lack">Les écrous 1 sont manquants</string>
+    <string name="error_nuts_2_lack">Les écrous 2 manquent de matière</string>
+    <string name="error_nuts_3_lack">Nuts 3 manque d\'ingrédients</string>
+    <string name="error_jam_1_lack">La confiture 1 n\'a plus d\'ingrédients</string>
+    <string name="error_jam_2_lack">La confiture 2 manque d\'ingrédients</string>
+    <string name="error_jam_3_lack">La confiture 3 manque d\'ingrédients</string>
+    <string name="error_reset">Échec de la réinitialisation</string>
+    <string name="error_cup_empty">Le compte-gouttes n\'a pas de tasse</string>
+    <string name="error_cup_1_empty">Aucune tasse dans le tube de tasse 1</string>
+    <string name="error_cup_2_empty">Pas de gobelet dans le tube de gobelet n°2</string>
+    <string name="error_no_in_refrigeration">Réfrigération automatique non renseignée</string>
+    <string name="error_milk_slurry_empty">Machine à glace à court d\'ingrédients</string>
+    <string name="error_machine_fault">Panne du corps principal de la machine à glace</string>
+    <string name="error_machine_offline">Le corps principal de la machine à glace a perdu la communication</string>
+    <string name="error_order_time_out">La sorbetière ne produit pas de glace</string>
+    <string name="error_door_obstacle">Il y a un obstacle au niveau de la grille</string>
+    <string name="error_claw_no_cup">La griffe électrique laisse tomber une tasse pendant le fonctionnement</string>
+    <string name="error_rotate_machine">Erreur du moteur pas à pas de rotation de l\'étage rotatif</string>
+    <string name="error_elevator_machine">Erreur du moteur pas à pas de levage de l\'étage rotatif</string>
+    <string name="error_door_machine">Erreur du moteur pas à pas de l\'ascenseur de porte</string>
+    <string name="error_door_slip_fail">Échec du glissement de la tasse à manger</string>
+    <string name="error_rotate_time_out">Délai d\'expiration de la rotation de la table de rotation</string>
+    <string name="error_contact_phone">Téléphone :</string>
+
+    <!-- Initialisation -->
+    <string name="init_sn_input">Entrez le numéro de périphérique</string>
+    <string name="init_sn_check">Veuillez vous assurer que le numéro de périphérique saisi est exact</string>
+    <string name="init_sn_save">Enregistrez et redémarrez pour prendre effet</string>
+    <string name="init_check_activation">Vérifier l\'état d\'activation···</string>
+    <string name="init_activation">Activer le périphérique···</string>
+    <string name="init_activation_error">Échec de l\'activation : %s</string>
+    <string name="init_power">Obtenir les autorisations du périphérique···</string>
+    <string name="init_power_error">Échec de l\'obtention des autorisations du périphérique : %s</string>
+    <string name="init_synchronization">Données de synchronisation···</string>
+    <string name="init_synchronization_error">Erreur de données de synchronisation : %s</string>
+    <string name="init_synchronization_error_dishes">Aucune information sur la parabole</string>
+    <string name="init_synchronization_error_stock">Informations manquantes sur l\'emplacement de l\'inventaire des appareils</string>
+    <string name="init_synchronization_error_material">Informations matérielles manquantes</string>
+    <string name="init_synchronization_error_spec">Informations pratiques manquantes</string>
+    <string name="init_startup">Programme de démarrage...</string>
+    <string name="init_complete">Initialisation terminée...</string>
+    <string name="init_store_config">Détecter la configuration du magasin···</string>
+    <string name="init_store_config_error">Exception de configuration du magasin : %s</string>
+    <string name="init_store_connect">Se connecter au système de commande···</string>
+    <string name="init_store_connect_error">Exception du système de classement des connexions : %s</string>
+    <string name="init_resource_download" formatted="false">Télécharger le fichier de ressources : %s, progression du téléchargement : %s</string>
+    <string name="init_update_tip">La mise à niveau automatique est en cours de maintenance, veuillez ne pas l\'utiliser</string>
+    <string name="init_update_install">Installation du dernier programme</string>
+    <string name="init_update_install_success">La mise à niveau est terminée, le programme démarrera automatiquement, veuillez ne pas l\'utiliser</string>
+    <string name="init_update_install_fail">L\'installation a échoué, veuillez réessayer</string>
+
+    <!-- Invite contextuelle -->
+    <string name="tip">Conseils</string>
+    <string name="tip_empty_order">Aucune information de commande trouvée</string>
+    <string name="tip_used_order">Code repas consommé</string>
+    <string name="tip_search_order_failed">Échec de l\'interrogation des données de commande</string>
+    <string name="tip_use_technology">"Veuillez utiliser ce module sous la direction du support technique !</string>
+    <string name="describe_shop_cart_clear_tip">Effacer les articles actuels du panier ? </string>
+    <string name="describe_update_password">Le mot de passe actuel est celui par défaut et il existe des risques de sécurité. Voulez-vous le modifier immédiatement ? </string>
+    <string name="describe_paying_give_up_tip">La commande ne sera pas effectuée après abandon. Si le paiement a été effectué, veuillez contacter le personnel d\'exploitation. Voulez-vous abandonner la commande ? </string>
+    <string name="describe_open_spec_multiple">Pour garantir une production normale, cette fonction ajustera la taille des portions de chaque saveur à environ 80 % de la portion à sélection unique\nÊtes-vous sûr de l\'activer ? </string>
+    <string name="describe_open_free_mode">Êtes-vous sûr d\'activer le mode glace gratuite pour cet appareil ? </string>
+    <string name="button_back">Retour</string>
+    <string name="button_update">Modifier</string>
+    <string name="button_open">Afficher</string>
+    <string name="button_start">Démarrer</string>
+    <string name="button_clear">Effacer</string>
+    <string name="button_delete">Retour arrière</string>
+    <string name="button_confirm">Confirmer</string>
+    <string name="button_cancel">Annuler</string>
+    <string name="button_un_set_pwd">Pas encore défini</string>
+    <string name="button_set_pwd">Définir un nouveau mot de passe</string>
+    <string name="button_paying_give_up">Abandonner la commande</string>
+    <string name="button_paying_keep_on">Continuer à payer</string>
+    <string name="button_setting">Paramètres</string>
+
+    <string name="plc_errTip1">Mode manuel de l\'équipement</string>
+    <string name="plc_errTip2">Anormalité de l\'équipement</string>
+    <string name="plc_errTip3">L\'appareil est occupé</string>
+    <string name="plc_errTip4">Il y a un capteur au niveau du point de vente alimentaire</string>
+
+    <string name="setting_jam_set">Modifier</string>
+    <string name="setting_ker_map">Cartographie des pauses fruits</string>
+    <string name="setting_jam_map">Pipeline de mappage</string>
+    <string name="setting_ker_def">Écrasement de fruits par défaut</string>
+    <string name="setting_jam_def">Tube par défaut</string>
+
+    <string name="time_ready">L\'heure actuelle est en cours de préparation</string>
+    <string name="maxcount_tips_start">Afin de garantir le goût, veuillez scanner à nouveau le code après avoir pris 6 tasses~</string>
+    <string name="maxcount_tips_end">Il vous reste encore de la glace et vous devez continuer à scanner le code~</string>
+
+    <string name="setting_warn_real_time">Avertissement en temps réel :</string>
+    <string name="setting_error_log">Journal des défauts :</string>
+    <string name="setting_make_fail_title">Make Fail !</string>
+    <string name="setting_make_fail">Alarme :</string>
+    <string name="setting_make_fail_insert">Insertion d\'une alarme d\'avertissement :</string>
+    <string name="setting_make_fail_warn">Avertissement</string>
+
+    <!-- Journal -->
+    <string name="making_error">Exception dans la fabrication de glace</string>
+    <string name="making_ing">Fabrication de glaces</string>
+    <string name="making_out_cup">making_out_cup</string>
+    <string name="making_out_flavor">Crème glacée</string>
+    <string name="making_taking">En attendant d\'emporter la glace</string>
+    <string name="making_taked">La glace a été prise</string>
+    <string name="making_finish">Commande complète</string>
+    <string name="making_next">Faites la prochaine glace et il reste %d glaces à préparer</string>
+    <string name="mcu_connect">Connexion du périphérique réussie</string>
+    <string name="mcu_disconnect">Appareil déconnecté</string>
+    <string name="mcu_waring_message" formatted="false">Avertissement : %s, Message : %s</string>
+
+    <string name="setting_select_icon">Sélectionner l\'icône</string>
+    <string name="setting_select_kernel_icon">Sélectionnez l\'icône d\'écrasement de fruits</string>
+    <string name="setting_select_sauce_icon">Sélectionner l\'icône de confiture</string>
+
+    <string name="clean_recycle">Cycle de nettoyage : %d</string>
+    <string name="clean_lock_warning_last">Avertissement du dernier nettoyage</string>
+    <string name="clean_lock_warning_first">Avertissement de premier nettoyage</string>
+    <string name="clean_lock_warning_second">Deuxième avertissement de nettoyage</string>
+    <string name="clean_lock_notify_last">Nettoyage de la dernière notification</string>
+    <string name="clean_lock_notify_first">Premier nettoyage des notifications</string>
+    <string name="clean_lock_notify_second">Deuxième nettoyage des notifications</string>
+    <string name="scan_code">Code QR reconnu : %s</string>
+
+    <string name="update_channel">Mettre à jour le canal de paiement vers : %d</string>
+    <string name="update_mode">Le mode d\'exécution de la mise à jour est : %d</string>
+    <string name="pay_demo">démo payante</string>
+    <string name="pay_select">Sélectionnez le mode de paiement</string>
+    <string name="no_pay">Aucun paiement requis</string>
+    <string name="cash_pay">Paiement en espèces</string>
+    <string name="credit_failed">La communication avec le lecteur de carte a échoué, veuillez réessayer plus tard</string>
+    <string name="system_link">Connecter le système</string>
+    <string name="system_divorce">Quitter le système</string>
+    <string name="update_app">Vérifier les mises à jour</string>
+    <string name="price_model">Paiement mixte billets et pièces</string>
+    <string name="nayax_model1">Nayax Pas d\'inactivité</string>
+    <string name="nayax_model2">Nayax inactif</string>
+    <string name="have_money">Montant investi :</string>
+    <string name="nayax_model">Modèle NaYax :</string>
+    <string name="nayax_pay">Paiement NaYax</string>
+    <string name="nayax_pay_mix">NaYax+paiement mixte</string>
+    <string name="setting_pay_pos_pay_mix">Lecteur de carte MDB + paiement mixte</string>
+    <string name="online_and_price_model">Deux codes en un seul paiement + paiement en papier-monnaie</string>
+    <string name="ict_currency_selection">Sélection de la devise TIC</string>
+    <string name="banknote_exchange_protocol">Protocole d\'échange de billets de banque</string>
+    <string name="mdb_level">Niveau MDB</string>
+    <string name="coin_x">Temps d\'impulsion de pièce X</string>
+    <string name="coin_divide_x">Impulsion de pièce divisée par X</string>
+    <string name="setting_text_message">Modifier une partie du texte</string>
+    <string name="sleep_msg">Fermé</string>
+    <string name="setting_flavor_config">Paramètre de saveur</string>
+    <string name="setting_flavor_multiple_choice">Saveur à choix multiple</string>
+    <string name="setting_sale_service">Service de vente</string>
+    <string name="setting_service_visibility">Afficher le service</string>
+    <string name="setting_service_title">Titre du service</string>
+    <string name="setting_service_content">Contenu du service</string>
+    <string name="coin_rate">Taux des pièces</string>
+    <string name="confirm_name">Modifier le nom</string>
+    <string name="setting_technology_other">Autre</string>
+    <string name="alarm_clock_setting">Réveil programmé</string>
+    <string name="change_cooling">Commuter le refroidissement</string>
+    <string name="change_freshness">Changer de fraîcheur</string>
+    <string name="credit_describe">Modifier l\'invite de glissement de carte</string>
+    <string name="time_set">Paramètres liés à l\'heure</string>
+    <string name="card_time">Durée de la session de balayage de carte MDB</string>
+    <string name="cash_time">Durée de la session Cash</string>
+    <string name="automatic_back_time">Mode automatique : retour automatique à l\'heure de l\'interface de veille</string>
+    <string name="manual_back_time">Mode manuel : retour automatique au temps d\'interface en veille</string>
+    <string name="unit">Unité monétaire</string>
+    <string name="nayax_time">Durée de la session Nayax</string>
+    <string name="nayax_card_pay">Payer par carte</string>
+    <string name="nayax_scan_pay">Scannez le code QR pour payer</string>
+    <string name="nayax_pay_icon_choice">Changement d\'icône de paiement Nayax</string>
+    <string name="ic_icon_text">Modification du texte de l\'icône de crème glacée</string>
+    <string name="credit_card_text_description">Description textuelle de la carte de crédit</string>
+    <string name="function_switch_setting">Commutateur de réglage de fonction</string>
+</resources>
+    <!--法语-->

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

@@ -496,6 +496,7 @@
     <string name="nayax_pay_icon_choice">Նայաքս վճարման պատկերակի անջատիչ</string>
     <string name="ic_icon_text">Պաղպաղակի պատկերակի տեքստի փոփոխություն</string>
     <string name="credit_card_text_description">Վարկային քարտի տեքստային նկարագրություն</string>
+    <string name="function_switch_setting">Ֆունկցիայի կարգավորման անջատիչ</string>
 
 </resources>
 <!--亚美尼亚语-->

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

@@ -500,6 +500,7 @@
     <string name="nayax_pay_icon_choice">Nayax 결제 아이콘 스위치</string>
     <string name="ic_icon_text">아이스크림 아이콘 텍스트 변경</string>
     <string name="credit_card_text_description">신용카드 텍스트 설명</string>
+    <string name="function_switch_setting">기능 설정 스위치</string>
 
 </resources>
     <!--韩语-->

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

@@ -494,6 +494,7 @@
     <string name="nayax_pay_icon_choice">Nayax mokėjimo piktogramos jungiklis</string>
     <string name="ic_icon_text">Ledų piktogramos teksto keitimas</string>
     <string name="credit_card_text_description">Kredito kortelės teksto aprašas</string>
+    <string name="function_switch_setting">Funkcijų nustatymo jungiklis</string>
 
 </resources>
 <!--立陶宛-->

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

@@ -490,6 +490,7 @@
     <string name="nayax_pay_icon_choice">Nayax maksājumu ikonas slēdzis</string>
     <string name="ic_icon_text">Saldējuma ikonas teksta maiņa</string>
     <string name="credit_card_text_description">Kredītkartes teksta apraksts</string>
+    <string name="function_switch_setting">Funkciju iestatīšanas slēdzis</string>
 
 </resources>
 <!--拉脱维亚-->

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

@@ -495,6 +495,7 @@
     <string name="nayax_pay_icon_choice">Suis ikon pembayaran Nayax</string>
     <string name="ic_icon_text">Perubahan teks ikon aiskrim</string>
     <string name="credit_card_text_description">Penerangan teks kad kredit</string>
+    <string name="function_switch_setting">Suis tetapan fungsi</string>
 
 </resources>
 <!--马来语-->

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

@@ -497,6 +497,7 @@
     <string name="nayax_pay_icon_choice">Comutator pictogramă de plată Nayax</string>
     <string name="ic_icon_text">Schimbarea textului pictogramei înghețată</string>
     <string name="credit_card_text_description">Descrierea textului cardului de credit</string>
+    <string name="function_switch_setting">Comutator de setare a funcției</string>
 
 </resources>
 <!--罗马尼亚语-->

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

@@ -493,6 +493,7 @@
     <string name="nayax_pay_icon_choice">Переключатель значка платежа Nayax</string>
     <string name="ic_icon_text">Изменение текста значка мороженого</string>
     <string name="credit_card_text_description">Текстовое описание кредитной карты</string>
+    <string name="function_switch_setting">Переключатель настройки функции</string>
 
 </resources>
     <!--俄语-->

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

@@ -488,6 +488,7 @@
     <string name="nayax_pay_icon_choice">สลับไอคอนการชำระเงินของ Nayax</string>
     <string name="ic_icon_text">ข้อความเปลี่ยนไอคอนไอศกรีม</string>
     <string name="credit_card_text_description">คำอธิบายข้อความบัตรเครดิต</string>
+    <string name="function_switch_setting">สวิตช์การตั้งค่าฟังก์ชัน</string>
 
 </resources>
 <!--泰语-->

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

@@ -493,5 +493,7 @@
     <string name="nayax_pay_icon_choice">Nayax支付图标切换</string>
     <string name="ic_icon_text">冰淇淋图标文字更改</string>
     <string name="credit_card_text_description">信用卡文本描述</string>
+    <string name="function_switch_setting">功能设置开关</string>
+
 </resources>
 <!--中文-->

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

@@ -1,6 +1,4 @@
 <resources>
-
-
     <string name="setting_technology_language_describe">中文</string>
 
     <!-- 配置差分的主app名称-->

+ 1 - 1
config.gradle

@@ -5,7 +5,7 @@ ext {
             "minSdkVersion"                : 19,
             "targetSdkVersion"             : 28,
             "versionCode"                  : 110,
-            "versionName"                  : "1.0.37",//版本号修改
+            "versionName"                  : "1.0.40",//版本号修改
 
             "androidSupport"               : "28.0.0",
             "constraint-layout"            : "1.1.3",

文件差异内容过多而无法显示
+ 349 - 349
module_offpay/class_files.txt