Quellcode durchsuchen

煮鸡蛋程序上传,设置系统语言,修改键盘语言

zhangshenjie vor 1 Jahr
Ursprung
Commit
66499f50bd

+ 1 - 1
BusinessAirFryer/src/main/assets/config_000.json

@@ -15,7 +15,7 @@
       "bg": "cm_icon_cook_eggs",
       "icon": "cm_icon_cook_eggs",
       "devMode": "SOUP",
-      "listShow": false
+      "listShow": true
     },
     {
       "type": "WIGHT",

+ 4 - 0
BusinessMain/src/main/java/com/develop/main/ui/ModeEntranceActivity.kt

@@ -19,6 +19,7 @@ import com.develop.base.ext.src
 import com.develop.base.ext.updateText
 import com.develop.common.data_repo.FoodDataProvider
 import com.develop.base.util.MMkvUtils
+import com.develop.base.util.SettingKeyBoardUtils
 import com.develop.common.data_repo.db.DataFactory
 import com.develop.common.data_repo.db.RecipesType
 import com.develop.common.data_repo.db.entity.UserInfo
@@ -62,6 +63,9 @@ class ModeEntranceActivity : CommonBindingActivity<ActivityModeEntranceBinding>(
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         MMkvUtils.save(FIRST_IN, true)
+        //设置键盘语言
+        SettingKeyBoardUtils.setTingKeyBoard(this,MMkvUtils.getString(CURRENT_LANGUAGE)?.lowercase() ?:"en")
+
         prepareDataLiveData = FoodDataProvider.getPrepareLiveData() as MutableLiveData<Boolean>
         prepareDataLiveData.observe(this) {
             loadingDialog.removeSelf()

+ 1 - 0
BusinessSetting/src/main/java/com/develop/setting/ui/LanguageActivity.kt

@@ -86,6 +86,7 @@ class LanguageActivity : BaseBindingActivity<ActivityLanguageBinding>() {
             }
         }
       var list =   DataFactory.createLanguageDataV2(resources)
+
         binding.languageRecycle.apply {
             linear()
             setup {

+ 2 - 2
BusinessStep/src/main/java/com/develop/step/ui/ModesDetailActivity.kt

@@ -2204,8 +2204,8 @@ class ModesDetailActivity : CommonBVMActivity<ActivityModeDetailBinding, ModesVi
     private fun  visibilityEgg(visibility :Int){
         //2023.12.11 000A客户,鸡蛋程序还未完整,需隐藏
         if ("COOK_EGGS" == viewModel.modeType) {
-            binding.ivEggs.visibility = View.GONE
-            //由于SDK默认时间只有20秒,需要自己另行设置
+            binding.ivEggs.visibility = visibility
+            //由于鸡蛋SDK默认时间只有20秒,需要自己另行设置
             CofarSDK.devInfo().mode.maxTime = 20*60
         }else{
             binding.ivEggs.visibility = View.GONE

+ 2 - 2
app/build.gradle

@@ -13,8 +13,8 @@ ext{
     versionCode=Integer.parseInt(new SimpleDateFormat("yyMMddHH").format(new Date()) + 1)
 //    versionCode=230617180
 //    brandCode="036I"
-    brandCode="017A"
-    model="5037"
+    brandCode="000A"
+    model="1039"
 
 }
 

+ 22 - 0
app/src/main/java/com/develop/foodcooking/MainActivity.kt

@@ -11,7 +11,11 @@ import com.develop.base.ext.navigateTo
 import com.develop.base.ext.setNightTheme
 import com.develop.base.mvvm.BaseBindingActivity
 import com.develop.base.util.MMkvUtils
+import com.develop.base.util.SerialportUtils
+import com.develop.base.util.SettingKeyBoardUtils
+import com.develop.common.data_repo.db.DataFactory
 import com.develop.common.router.Screens
+import com.develop.common.tag.CURRENT_LANGUAGE
 import com.develop.common.tag.FIRST_IN
 import com.develop.common.ui.CommonBindingActivity
 import com.develop.common.utils.ConfigUtils
@@ -33,6 +37,24 @@ class MainActivity : CommonBindingActivity<ActivityMainBinding>() {
         if (MMkvUtils.getBool(FIRST_IN)) {
             navigateTo(Screens.Main.ENTRANCE_CHOSEN)
         } else {
+            //设置语言
+            var list = DataFactory.createLanguageDataV2(resources)
+            var listStr = mutableListOf<String>()
+            listStr.add("en")
+            for (i in 1..list.size) {
+                if (list[i-1].value.lowercase() != "en"){
+                    listStr.add(list[i-1].value.lowercase())
+                }
+            }
+
+            //获取配置语言,然后设置系统语言,首语言默认英语
+            SerialportUtils.getAddLocale(listStr)
+
+            //设置键盘语言
+            SettingKeyBoardUtils.setTingKeyBoard(
+                this,
+                MMkvUtils.getString(CURRENT_LANGUAGE)?.lowercase() ?: "en"
+            )
             //机器首次开机时会出现两段开机动画,这样给用户的感觉开机时长太长了,因此决定去掉后面apk显示的那一段开机动画
             navigateTo(Screens.Setting.LANGUAGE)
 //            navigateTo(Screens.Main.ENTRANCE_CHOSEN)

+ 2 - 1
libBase/src/main/java/com/develop/base/ext/GlobaExt.kt

@@ -188,13 +188,14 @@ fun getSN(): String {
 
 //    return "045A10220020123010120023"
 //    return "000A30150020123010190001"
+     return "002A30150020123010190001"
 //     return "000A10390020123010190001"
 //    return "010D30150020123010190001"
 //    return "011A30150020123010190001"
 //    return "007D20020020123010190001"
 //    return "036I21060020123010180001"
 //    return  "030A10390020123010190001"
-      return  "017A20060020123010190001"
+//    return  "017A20060020123010190001"
     //通过反射获取sn号
     try {
         val c = Class.forName("android.os.SystemProperties")

+ 250 - 0
libBase/src/main/java/com/develop/base/util/SerialportUtils.java

@@ -0,0 +1,250 @@
+package com.develop.base.util;
+
+import android.app.backup.BackupManager;
+import android.content.res.Configuration;
+import android.os.LocaleList;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class SerialportUtils {
+
+
+    //切换语言
+    public static void updateLanguage(Locale locale) {
+        try {
+            Object objIActMag;
+            Class clzIActMag = Class.forName("android.app.IActivityManager");
+            Class clzActMagNative = Class
+                    .forName("android.app.ActivityManagerNative");
+            //amn = ActivityManagerNative.getDefault();
+            Method mtdActMagNative$getDefault = clzActMagNative
+                    .getDeclaredMethod("getDefault");
+            objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
+            // objIActMag = amn.getConfiguration();
+            Method mtdIActMag$getConfiguration = clzIActMag
+                    .getDeclaredMethod("getConfiguration");
+            Configuration config = (Configuration) mtdIActMag$getConfiguration
+                    .invoke(objIActMag);
+            // set the locale to the new value
+            config.locale = locale;
+            //持久化  config.userSetLocale = true;
+            Class clzConfig = Class
+                    .forName("android.content.res.Configuration");
+            Field userSetLocale = clzConfig
+                    .getField("userSetLocale");
+            userSetLocale.set(config, true);
+            // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
+            // 会重新调用 onCreate();
+            Class[] clzParams = {Configuration.class};
+            // objIActMag.updateConfiguration(config);
+            Method mtdIActMag$updateConfiguration = clzIActMag
+                    .getDeclaredMethod("updateConfiguration", clzParams);
+            mtdIActMag$updateConfiguration.invoke(objIActMag, config);
+            BackupManager.dataChanged("com.android.providers.settings");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static void getAddLocale(List<String> list) {
+
+        List<Locale> listLocale = new ArrayList<>();
+        for (int i = 0; i < list.size(); i++) {
+            Locale locale = getLocale(list.get(i));
+            if (locale!=null){
+                listLocale.add(locale);
+            }
+        }
+
+        Locale[] localesList = listLocale.toArray(new Locale[listLocale.size() ]);
+        LocaleList ll = new LocaleList(localesList);
+        try {
+            Class localPicker = Class.forName("com.android.internal.app.LocalePicker");
+            Method updateLocale = localPicker.getDeclaredMethod("updateLocales",
+                    LocaleList.class);
+            updateLocale.invoke(null, ll);
+        } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException
+                 | IllegalAccessException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static void setLanguage(Locale setLocaleLauguage) {
+        try {
+            Class classActivityManagerNative = Class.forName("android.app.ActivityManagerNative");
+            Method getDefault = classActivityManagerNative.getDeclaredMethod("getDefault");
+            Object objIActivityManager = getDefault.invoke(classActivityManagerNative);
+            Class classIActivityManager = Class.forName("android.app.IActivityManager");
+            Method getConfiguration = classIActivityManager.getDeclaredMethod("getConfiguration");
+            Configuration config = (Configuration) getConfiguration.invoke(objIActivityManager);
+            config.setLocale(setLocaleLauguage);
+
+            Class clzConfig = Class.forName("android.content.res.Configuration");
+            Field userSetLocale = clzConfig.getField("userSetLocale");
+            userSetLocale.set(config, true);
+            Class[] clzParams = new Class[]{Configuration.class};
+            Method updateConfiguration = classIActivityManager.getDeclaredMethod("updateConfiguration", clzParams);
+            updateConfiguration.invoke(objIActivityManager, config);
+            BackupManager.dataChanged("com.android.providers.settings");
+        } catch (Exception var12) {
+
+        }
+    }
+
+    private static Locale getLocale(String lankey) {
+        if (LangKey.ZH_CN.equals(lankey)) {
+            return Locale.CHINA;
+        } else if (LangKey.EN_US.equals(lankey)) {
+            return Locale.ENGLISH;
+        } else if (LangKey.JA_JP.equals(lankey)) {
+            return Locale.JAPAN;
+        } else if (LangKey.KO_KR.equals(lankey)) {
+            return Locale.KOREA;
+        }else if (LangKey.DE_DE.equals(lankey)){
+            return  Locale.GERMAN;
+        } else if (LangKey.LO_LA.equals(lankey)) {
+            return new Locale("lo", "la");
+        } else if (LangKey.KM_KH.equals(lankey)) {
+            return new Locale("km", "kh");
+        } else if (LangKey.TL_PH.equals(lankey)) {
+            return new Locale("tl", "ph");
+        } else if (LangKey.MY_MM.equals(lankey)) {
+            return new Locale("my", "mm");
+        } else if (LangKey.RU_RU.equals(lankey)) {
+            return new Locale("ru", "ru");
+        } else if (LangKey.CS_CZ.equals(lankey)) {
+            return new Locale("cs", "cz");
+        } else if (LangKey.PL_PL.equals(lankey)) {
+            return new Locale("pl", "pl");
+        }else if (LangKey.FR_FR.equals(lankey)){
+            return new Locale("fr", "fr");
+        }else if (LangKey.NL_NL.equals(lankey)){
+            return new Locale("nl", "nl");
+        }else if (LangKey.PT_PT.equals(lankey)){
+            return new Locale("pt", "pt");
+        }else if (LangKey.ES_ES.equals(lankey)){
+            return new Locale("es", "es");
+        }else if (LangKey.IT_IT.equals(lankey)){
+            return new Locale("it", "it");
+        }else if (LangKey.GR_GR.equals(lankey)){
+            //特殊处理由于语言配置是配置gr,但系统前缀是el
+            return new Locale("el", "gr");
+        }else if (LangKey.RO_RO.equals(lankey)){
+            return new Locale("ro", "ro");
+        }else if (LangKey.FI_FI.equals(lankey)){
+            return new Locale("fi", "fi");
+        }else if (LangKey.NO_NO.equals(lankey)){
+            return new Locale("no", "no");
+        }else if (LangKey.SE_SE.equals(lankey)){
+            //特殊处理由于语言配置是配置se,但系统前缀是sv
+            return new Locale("sv", "se");
+        }else if (LangKey.DK_DK.equals(lankey)){
+            //特殊处理由于语言配置是配置dk,但系统前缀是da
+            return new Locale("da", "dk");
+        }else if (LangKey.CZ_CZ.equals(lankey)){
+            //特殊处理由于语言配置是配置cz,但系统前缀是cs
+            return new Locale("cs", "cz");
+        }else if (LangKey.EE_EE.equals(lankey)){
+            //特殊处理由于语言配置是配置ee,但系统前缀是et
+            return new Locale("et", "ee");
+        }else if (LangKey.SK_SK.equals(lankey)){
+            return new Locale("sk", "sk");
+        }else if (LangKey.UK_UK.equals(lankey)){
+            return new Locale("uk", "ua");
+        }else if (LangKey.AR_AR.equals(lankey)){
+            return new Locale("ar", "ae");
+        }else if (LangKey.LT_LT.equals(lankey)){
+            return new Locale("lt", "lt");
+        }else if (LangKey.IR_IR.equals(lankey)){
+            return new Locale("ir", "ir");
+        }else if (LangKey.KZ_KZ.equals(lankey)){
+            //特殊处理由于语言配置是配置se,但系统前缀是sv
+            return new Locale("kz", "kz");
+        }else {
+            return null;
+        }
+    }
+
+    public static class LangKey {
+        //---------------语言名字key---------------
+        //中文简体
+        public static final String ZH_CN = "zh";
+        //英语
+        public static final String EN_US = "en";
+        //日语
+        public static final String JA_JP = "ja";
+        //韩语
+        public static final String KO_KR = "ko";
+        //柬埔寨语
+        public static final String KM_KH = "km";
+        //泰国
+        public static final String TH_TH = "th";
+        //法语
+        public static final String FR_FR = "fr";
+        //越南语
+        public static final String VI_VN = "vi";
+        //菲律宾语
+        public static final String TL_PH = "tl";
+        //马来西亚语
+        public static final String MS_MY = "ms";
+        //缅甸语
+        public static final String MY_MM = "my";
+        //捷克语
+        public static final String CS_CZ = "cs";
+        //印度尼西亚语
+        public static final String IN_ID = "in";
+        //老挝语
+        public static final String LO_LA = "lo";
+        //俄语
+        public static final String RU_RU = "ru";
+        //印度
+        public static final String HI_IN = "hi";
+        //波兰语
+        public static final String PL_PL = "pl";
+        //德语
+        public static final String DE_DE = "de";
+        //荷兰语
+        public static final String NL_NL = "nl";
+        //葡萄牙
+        public static final String PT_PT = "pt";
+        //葡萄牙
+        public static final String ES_ES = "es";
+        //意大利
+        public static final String IT_IT = "it";
+        //希腊
+        public static final String GR_GR = "gr";
+        //罗马尼亚语
+        public static final String RO_RO = "ro";
+        //芬兰语
+        public static final String FI_FI = "fi";
+        //挪威语
+        public static final String NO_NO = "no";
+        //瑞典语
+        public static final String SE_SE = "se";
+        //丹麦语
+        public static final String DK_DK = "dk";
+        //捷克语
+        public static final String CZ_CZ = "cz";
+        //爱沙尼亚语
+        public static final String EE_EE = "ee";
+        //斯洛伐克语
+        public static final String SK_SK = "sk";
+        //乌克兰语
+        public static final String UK_UK = "uk";
+        //阿拉伯语
+        public static final String AR_AR = "ar";
+        //立陶宛语
+        public static final String LT_LT = "lt";
+        //波斯语
+        public static final String IR_IR = "ir";
+        //哈萨克语
+        public static final String KZ_KZ = "kz";
+    }
+
+}

+ 42 - 0
libBase/src/main/java/com/develop/base/util/SettingKeyBoardUtils.kt

@@ -0,0 +1,42 @@
+package com.develop.base.util
+
+import android.app.Activity
+import android.provider.Settings
+import android.view.inputmethod.InputMethodInfo
+import android.view.inputmethod.InputMethodManager
+import androidx.appcompat.app.AppCompatActivity
+
+object SettingKeyBoardUtils {
+    //设置键盘语言
+     fun setTingKeyBoard(activity: Activity, language : String) {
+        var str = ""
+        var keyhashCode = -921088104 // 默认英文键盘
+        str = if (language == "en"){
+            "en_US"
+        }else{
+            language
+        }
+
+            //de
+        val imm = activity.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
+        // 取得当前所有的输入法
+        var infos = imm.getInputMethodList() as List<InputMethodInfo>
+        //筛选是系统语言
+        infos.filter {  it.packageName.equals("com.android.inputmethod.latin")}
+        infos.forEach{
+            var sum = it.subtypeCount
+            for (i in 0 until  sum){
+                val  subtype = it.getSubtypeAt(i)
+                val locale = subtype.locale
+                if (locale == str){
+                    keyhashCode = subtype.hashCode()
+                }
+            }
+        }
+
+        //设置键盘语言
+        Settings.Secure.putInt(activity.contentResolver, Settings.Secure.SELECTED_INPUT_METHOD_SUBTYPE,
+            keyhashCode);
+
+    }
+}