浏览代码

Languageutil

liuzhenxing1118 8 月之前
父节点
当前提交
15b5f8c076

+ 7 - 64
app/src/main/java/com/xplora/xponboarding/Activity/OnboardingActivity.java

@@ -1,7 +1,6 @@
 package com.xplora.xponboarding.Activity;
 
 import android.content.Intent;
-import android.content.res.Configuration;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
@@ -9,22 +8,16 @@ import android.widget.AdapterView;
 import android.widget.Button;
 import android.widget.ListView;
 
-import com.android.internal.app.LocaleHelper;
 import com.xplora.xponboarding.Adapter.BaseListAdapter;
 import com.xplora.xponboarding.Data.DataManager;
 import com.xplora.xponboarding.Model.BaseModel;
 import com.xplora.xponboarding.R;
 import com.xplora.xponboarding.Utils.Constant;
-import com.xplora.xponboarding.Utils.ResUtils;
-
-import java.lang.reflect.Method;
+import com.xplora.xponboarding.Utils.LanguageUtil;
 import java.util.ArrayList;
-import java.util.Locale;
 
 
 public class OnboardingActivity extends BaseActivatedActivity {
-    private ArrayList<String> mLanguageList = null;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -50,27 +43,13 @@ public class OnboardingActivity extends BaseActivatedActivity {
     }
 
     private void initData() {
-        //mLanguageList = DataManager.getLanguageList();
-        mLanguageList = new ArrayList<>();
-        mLanguageList.add("zh-CN");
-        String currentLanguage = DataManager.getCurrentLanguage();
-
-        for (String s : mLanguageList) {
-            Locale locale = ResUtils.getLocaleName(s);
-            String name = LocaleHelper.getDisplayName(locale, locale, true);
-            int endIndex = name.indexOf("(");
-            if (endIndex >= 0) {
-                name = name.substring(0, endIndex);
-            }
-
-            //-, _ 不同,影响判断
-            String s1 = s.replace("-", "").replace("_", "").trim();
-            String c1 = currentLanguage.replace("-", "").replace("_", "").trim();
-            boolean isOn = s1.equals(c1);
-
+        ArrayList<String> nameList = LanguageUtil.getLanguageNameList();
+        int curIndex = LanguageUtil.getLanguageIndex();
+        for (int i = 0; i < nameList.size(); i++) {
+            String name = nameList.get(i);
             BaseModel model = new BaseModel();
             model.title = name;
-            model.isOn = isOn;
+            model.isOn = i == curIndex;
             model.cellType = Constant.CellType.CHECKBOX;
             mDataList.add(model);
         }
@@ -85,7 +64,7 @@ public class OnboardingActivity extends BaseActivatedActivity {
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 if (position >= mDataList.size())
                     return;
-                save(position);
+                LanguageUtil.updateLanguage(position);
                 refresh(position);
             }
         });
@@ -109,40 +88,4 @@ public class OnboardingActivity extends BaseActivatedActivity {
         mAdapter.setBaseObjects(mDataList);
         mAdapter.notifyDataSetInvalidated();
     }
-
-    public void save(int position) {
-        if (position >= mLanguageList.size())
-            return;
-        String language = mLanguageList.get(position);
-        Locale locale = ResUtils.getLocaleName(language);
-        updateLanguage(locale);
-    }
-
-    public void updateLanguage(Locale locale) {
-        try {
-            Object objIActMag, objActMagNative;
-            Class clzIActMag = Class.forName("android.app.IActivityManager");
-            Class clzActMagNative = Class
-                    .forName("android.app.ActivityManagerNative");
-            Method mtdActMagNative$getDefault = clzActMagNative
-                    .getDeclaredMethod("getDefault");
-            objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
-            Method mtdIActMag$getConfiguration = clzIActMag
-                    .getDeclaredMethod("getConfiguration");
-            Configuration config = (Configuration) mtdIActMag$getConfiguration
-                    .invoke(objIActMag);
-            config.locale = locale;
-            Class clzConfig = Class
-                    .forName("android.content.res.Configuration");
-            java.lang.reflect.Field userSetLocale = clzConfig
-                    .getField("userSetLocale");
-            userSetLocale.set(config, true);
-            Class[] clzParams = { Configuration.class };
-            Method mtdIActMag$updateConfiguration = clzIActMag
-                    .getDeclaredMethod("updateConfiguration", clzParams);
-            mtdIActMag$updateConfiguration.invoke(objIActMag, config);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
 }

+ 0 - 50
app/src/main/java/com/xplora/xponboarding/Data/DataManager.java

@@ -145,11 +145,6 @@ public class DataManager extends Application {
                 PackageManager.DONT_KILL_APP);
     }
 
-    public static String getLanguage(Context context) {
-        Locale locale = context.getResources().getConfiguration().locale;
-        return locale.getLanguage();
-    }
-
     @SuppressLint("HardwareIds")
     public static String getIMEI() {
         if (Macros.DEBUG) {
@@ -166,49 +161,4 @@ public class DataManager extends Application {
             return SystemProperties.get("persist.zs.bt.address", "");
         }
     }
-
-    public static String getCurrentLanguage() {
-        LocaleList list = LocalePicker.getLocales();
-        if (list.size() <= 0)
-            return "";
-        String s = list.get(0).toString();
-        if (s.isEmpty())
-            return "";
-        //国内项目,判断中文简体繁体会有问题,所以不需要判断-
-        if (false) {
-            if (s.contains("-")) {
-                s = s.split("-")[0];
-            } else if (s.contains("_")) {
-                s = s.split("_")[0];
-            }
-        }
-        Log.d(TAG, "getCurrentLanguage: " + s);
-        return s;
-    }
-
-    public static ArrayList<String> getLanguageList() {
-        if (Macros.DEBUG)
-            return new ArrayList<>();
-        String[] languages = LocalePicker.getSystemAssetLocales();
-
-        ArrayList<String> list = new ArrayList<>();
-        for (String s:languages) {
-            if (s == null || s.isEmpty())
-                continue;
-            //国内项目,判断中文简体繁体会有问题,所以不需要判断-
-            if (false) {
-                if (s.contains("-")) {
-                    s = s.split("-")[0];
-                } else if (s.contains("_")) {
-                    s = s.split("_")[0];
-                }
-            }
-            boolean isExist = list.contains(s);
-            if (isExist)
-                continue;
-            list.add(s);
-        }
-        Log.d(TAG, "getLanguageList2: " + list.toString());
-        return list;
-    }
 }

+ 153 - 0
app/src/main/java/com/xplora/xponboarding/Utils/LanguageUtil.java

@@ -0,0 +1,153 @@
+package com.xplora.xponboarding.Utils;
+
+import android.content.res.Configuration;
+import android.os.LocaleList;
+import android.util.Log;
+
+import com.android.internal.app.LocaleHelper;
+import com.android.internal.app.LocalePicker;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Locale;
+
+public class LanguageUtil {
+    public static String TAG = "losion / xponboarding :" + "LanguageUtil";
+
+    public static String getLanguage() {
+        LocaleList list = LocalePicker.getLocales();
+        if (list.size() <= 0)
+            return "";
+        String s = list.get(0).toString();
+        if (s.isEmpty())
+            return "";
+        //国内项目,判断中文简体繁体会有问题,所以不需要判断-
+        if (false) {
+            if (s.contains("-")) {
+                s = s.split("-")[0];
+            } else if (s.contains("_")) {
+                s = s.split("_")[0];
+            }
+        }
+        Log.d(TAG, "getLanguage: " + s);
+        return s;
+    }
+
+    public static int getLanguageIndex() {
+        String cur = getLanguage();
+        ArrayList<String> list = getLanguageList();
+        for (int i = 0; i < list.size(); i++) {
+            String s = list.get(i);
+            if (isLanguageEquel(s, cur)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    public static ArrayList<String> getLanguageList() {
+        if (Macros.DEBUG)
+            return new ArrayList<>();
+        String[] languages = LocalePicker.getSystemAssetLocales();
+
+        ArrayList<String> list = new ArrayList<>();
+        for (String s:languages) {
+            if (s == null || s.isEmpty())
+                continue;
+            //系统中有en,en-US 2个,单独处理,去除一个
+            if (s.equals("en-US"))
+                continue;
+            //国内项目,判断中文简体繁体会有问题,所以不需要判断-
+            if (false) {
+                if (s.contains("-")) {
+                    s = s.split("-")[0];
+                } else if (s.contains("_")) {
+                    s = s.split("_")[0];
+                }
+            }
+            boolean isExist = list.contains(s);
+            if (isExist)
+                continue;
+            list.add(s);
+        }
+        Log.d(TAG, "getLanguageList: " + list.toString());
+        return list;
+    }
+
+    public static ArrayList<String> getLanguageNameList() {
+        ArrayList<String> ret = new ArrayList<>();
+        ArrayList<String> list = getLanguageList();
+        for (String s: list) {
+            Locale locale = LanguageUtil.getLocaleName(s);
+            String name = LocaleHelper.getDisplayName(locale, locale, true);
+            int endIndex = name.indexOf("(");
+            if (endIndex >= 0) {
+                name = name.substring(0, endIndex);
+            }
+            ret.add(name);
+        }
+        return ret;
+    }
+
+    public static boolean isLanguageEquel(String value1, String value2) {
+        //-, _ 不同,影响判断
+        String v1 = value1.replace("-", "").replace("_", "").trim();
+        String v2 = value2.replace("-", "").replace("_", "").trim();
+        return v1.equals(v2);
+    }
+
+    public static Locale getLocaleName(String language) {
+        Locale locale;
+        if (language.equals("sr")) {
+            locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("latn").build();
+        } else {
+            int index = language.indexOf('-');
+            if (index == -1) {
+                locale = new Locale(language);
+            } else {
+                String lan = language.substring(0, index);
+                String reg = language.substring(index+1, language.length());
+                locale = new Locale.Builder().setLanguage(lan).setRegion(reg).build();
+            }
+        }
+        return locale;
+    }
+
+    public static void updateLanguage(int index) {
+        ArrayList<String> list = getLanguageList();
+        if (index >= list.size())
+            return;
+        String language = list.get(index);
+        Locale locale = LanguageUtil.getLocaleName(language);
+        updateLanguageWithLocale(locale);
+    }
+
+    public static void updateLanguageWithLocale(Locale locale) {
+        Log.d(TAG, "updateLanguage: " + locale.getLanguage());
+        try {
+            Object objIActMag, objActMagNative;
+            Class clzIActMag = Class.forName("android.app.IActivityManager");
+            Class clzActMagNative = Class
+                    .forName("android.app.ActivityManagerNative");
+            Method mtdActMagNative$getDefault = clzActMagNative
+                    .getDeclaredMethod("getDefault");
+            objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
+            Method mtdIActMag$getConfiguration = clzIActMag
+                    .getDeclaredMethod("getConfiguration");
+            Configuration config = (Configuration) mtdIActMag$getConfiguration
+                    .invoke(objIActMag);
+            config.locale = locale;
+            Class clzConfig = Class
+                    .forName("android.content.res.Configuration");
+            java.lang.reflect.Field userSetLocale = clzConfig
+                    .getField("userSetLocale");
+            userSetLocale.set(config, true);
+            Class[] clzParams = { Configuration.class };
+            Method mtdIActMag$updateConfiguration = clzIActMag
+                    .getDeclaredMethod("updateConfiguration", clzParams);
+            mtdIActMag$updateConfiguration.invoke(objIActMag, config);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+}

+ 0 - 17
app/src/main/java/com/xplora/xponboarding/Utils/ResUtils.java

@@ -66,23 +66,6 @@ public class ResUtils {
         return context.getResources().getIdentifier(imageName, defType, packageName);
     }
 
-    public static Locale getLocaleName(String language) {
-        Locale locale;
-        if (language.equals("sr")) {
-            locale = new Locale.Builder().setLanguage("sr").setRegion("RS").setScript("latn").build();
-        } else {
-            int index = language.indexOf('-');
-            if (index == -1) {
-                locale = new Locale(language);
-            } else {
-                String lan = language.substring(0, index);
-                String reg = language.substring(index+1, language.length());
-                locale = new Locale.Builder().setLanguage(lan).setRegion(reg).build();
-            }
-        }
-        return locale;
-    }
-
     /**
      * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
      */