[8.3.0] 司乘屏国际化自动修改功能,暂时未完成,因为乘客屏与当前国家化功能dpi存在冲突,会导致乘客屏UI大小错乱,暂时无法解决

This commit is contained in:
xinfengkun
2025-12-18 14:12:52 +08:00
parent 7eb1520e25
commit eeec0520d0
5 changed files with 193 additions and 0 deletions

View File

@@ -18,6 +18,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.RadioGroup
import android.widget.TextView
import androidx.annotation.RequiresApi
import androidx.appcompat.widget.ListPopupWindow
@@ -36,6 +37,7 @@ import com.mogo.commons.constants.SharedPrefsConstants
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.storage.SharedPrefsMgr
import com.mogo.commons.utils.LocaleHelper
import com.mogo.commons.voice.AIAssist
import com.mogo.eagle.core.data.app.AppConfigInfo
import com.mogo.eagle.core.data.config.FunctionBuildConfig
@@ -161,6 +163,9 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.btnEnsureMap
import kotlinx.android.synthetic.main.view_debug_setting.view.btnFmd
import kotlinx.android.synthetic.main.view_debug_setting.view.btnHdVisualAdjust
import kotlinx.android.synthetic.main.view_debug_setting.view.btnIpcReboot
import kotlinx.android.synthetic.main.view_debug_setting.view.btnLanguageChinese
import kotlinx.android.synthetic.main.view_debug_setting.view.btnLanguageEnglish
import kotlinx.android.synthetic.main.view_debug_setting.view.btnLanguageFollowSystem
import kotlinx.android.synthetic.main.view_debug_setting.view.btnPassengerReboot
import kotlinx.android.synthetic.main.view_debug_setting.view.btnPointCloudColor
import kotlinx.android.synthetic.main.view_debug_setting.view.btnPointCloudSize
@@ -217,6 +222,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.etThreshold
import kotlinx.android.synthetic.main.view_debug_setting.view.exportAllLogs
import kotlinx.android.synthetic.main.view_debug_setting.view.hdMapControllerLayout
import kotlinx.android.synthetic.main.view_debug_setting.view.hmiControllerLayout
import kotlinx.android.synthetic.main.view_debug_setting.view.layoutLanguage
import kotlinx.android.synthetic.main.view_debug_setting.view.logLoadingView
import kotlinx.android.synthetic.main.view_debug_setting.view.logcatCenterLayout
import kotlinx.android.synthetic.main.view_debug_setting.view.obuConnectStatusTv
@@ -224,6 +230,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.obuControllerLayou
import kotlinx.android.synthetic.main.view_debug_setting.view.reportMsgLayout
import kotlinx.android.synthetic.main.view_debug_setting.view.reset_changesight
import kotlinx.android.synthetic.main.view_debug_setting.view.rgGpsProvider
import kotlinx.android.synthetic.main.view_debug_setting.view.rgLanguage
import kotlinx.android.synthetic.main.view_debug_setting.view.statusCenterLayout
import kotlinx.android.synthetic.main.view_debug_setting.view.swDevelopMode
import kotlinx.android.synthetic.main.view_debug_setting.view.tbADASLog
@@ -252,6 +259,7 @@ import kotlinx.android.synthetic.main.view_debug_setting.view.tbIsDrawPath
import kotlinx.android.synthetic.main.view_debug_setting.view.tbIsDrawUnknownIdentifyData
import kotlinx.android.synthetic.main.view_debug_setting.view.tbIsRainMode
import kotlinx.android.synthetic.main.view_debug_setting.view.tbIsStrictMode
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLanguage
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogCatch
import kotlinx.android.synthetic.main.view_debug_setting.view.tbLogcatCenter
import kotlinx.android.synthetic.main.view_debug_setting.view.tbNetLog
@@ -859,6 +867,50 @@ internal class DebugSettingView @JvmOverloads constructor(
ActivityUtils.startActivity(AutopilotCheckAct::class.java)
}
when (LocaleHelper.getLanguage(AbsMogoApplication.getApp())) {
LocaleHelper.LANGUAGE_FOLLOW_SYSTEM -> {
rgLanguage.check(R.id.btnLanguageFollowSystem)
}
LocaleHelper.LANGUAGE_CHINESE -> {
rgLanguage.check(R.id.btnLanguageChinese)
}
LocaleHelper.LANGUAGE_ENGLISH -> {
rgLanguage.check(R.id.btnLanguageEnglish)
}
else -> {}
}
/**
* 语言
*/
tbLanguage.setOnCheckedChangeListener { buttonView, isChecked ->
if (isChecked) {
buttonView.setCompoundDrawables(null, null, iconDown, null)
//展示调试中心
layoutLanguage.visibility = View.VISIBLE
} else {
buttonView.setCompoundDrawables(null, null, iconRight, null)
//隐藏日志中心
layoutLanguage.visibility = View.GONE
}
}
rgLanguage.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { group, checkedId ->
when (checkedId) {
R.id.btnLanguageFollowSystem -> {
LocaleHelper.setLocale(AbsMogoApplication.getApp(), LocaleHelper.LANGUAGE_FOLLOW_SYSTEM)
}
R.id.btnLanguageChinese -> {
LocaleHelper.setLocale(AbsMogoApplication.getApp(), LocaleHelper.LANGUAGE_CHINESE)
}
R.id.btnLanguageEnglish -> {
LocaleHelper.setLocale(AbsMogoApplication.getApp(), LocaleHelper.LANGUAGE_ENGLISH)
}
}
})
/**
* 日志中心
*/

View File

@@ -1,6 +1,7 @@
package com.mogo.eagle.core.function.main
import android.Manifest
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
@@ -23,6 +24,7 @@ import com.mogo.commons.context.ContextHolderUtil
import com.mogo.commons.debug.DebugConfig
import com.mogo.commons.module.status.MogoStatusManager
import com.mogo.commons.mvp.MvpActivity
import com.mogo.commons.utils.LocaleHelper
import com.mogo.commons.utils.MogoAnalyticUtils
import com.mogo.eagle.core.data.autopilot.AutopilotStatusInfo
import com.mogo.eagle.core.data.deva.chain.ChainConstant
@@ -95,6 +97,11 @@ open class MainActivity : MvpActivity<MainView?, MainPresenter?>(), MainView,
PermissionsDialogUtils.openAppDetails(this, StringUtils.getString(R.string.module_core_show_pop_window), REQUEST_CODE_DIALOG)
}
// override fun attachBaseContext(newBase: Context) {
// super.attachBaseContext(LocaleHelper.onAttach(newBase))
// }
// todo 优化 车聊聊
private fun injectFloatView() {
val decorView = this.window.decorView as? FrameLayout ?: return

View File

@@ -233,6 +233,67 @@
android:layout_height="1dp"
android:background="#F0F0F0" />
<ToggleButton
android:id="@+id/tbLanguage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/dp_10"
android:background="@drawable/radio_button_normal_background_right"
android:drawableEnd="@drawable/icon_right"
android:padding="@dimen/dp_20"
android:textOff="语言"
android:textOn="语言"
android:textSize="@dimen/dp_24" />
<LinearLayout
android:id="@+id/layoutLanguage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/dp_20"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="选中跟随系统时,在系统设置中修改系统语言后必须手动重启鹰眼才能够生效"
android:textSize="@dimen/dp_22" />
<RadioGroup
android:id="@+id/rgLanguage"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/btnLanguageFollowSystem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/dp_20"
android:text="跟随系统"
android:textSize="@dimen/dp_24" />
<RadioButton
android:id="@+id/btnLanguageChinese"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/dp_20"
android:text="简体中文"
android:textSize="@dimen/dp_24" />
<RadioButton
android:id="@+id/btnLanguageEnglish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="@dimen/dp_20"
android:text="English"
android:textAllCaps="false"
android:textSize="@dimen/dp_24" />
</RadioGroup>
</LinearLayout>
<ToggleButton
android:id="@+id/tbIsStrictMode"
android:layout_width="match_parent"

View File

@@ -14,6 +14,7 @@ import com.mogo.commons.debug.DebugConfig;
import com.mogo.commons.koom.KoomInitTask;
import com.mogo.commons.screen.ScreenHelper;
import com.mogo.commons.module.MogoServices;
import com.mogo.commons.utils.LocaleHelper;
import com.mogo.eagle.core.utilcode.mogo.logger.CallerLogger;
import com.mogo.eagle.core.utilcode.mogo.toast.TipDrawable;
import com.mogo.eagle.core.utilcode.mogo.toast.TipToast;
@@ -59,6 +60,10 @@ public abstract class AbsMogoApplication extends Application {
MogoServices.getInstance().init(this);
}
// @Override
// protected void attachBaseContext(Context base) {
// super.attachBaseContext(LocaleHelper.onAttach(base));
// }
private void initRxJavaErrorHandler() {
RxJavaPlugins.setErrorHandler(throwable -> {
CallerLogger.e("RxJava", "" + throwable);

View File

@@ -0,0 +1,68 @@
package com.mogo.commons.utils;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import java.util.Locale;
public class LocaleHelper {
public static final String KEY_APP_LANGUAGE = "app_language";
// 语言代码常量
public static final String LANGUAGE_FOLLOW_SYSTEM = "auto";
public static final String LANGUAGE_CHINESE = "zh";
public static final String LANGUAGE_ENGLISH = "en";
// 在 Application 和 BaseActivity 的 attachBaseContext 中调用
public static Context onAttach(Context context) {
String lang = getPersistedData(context, LANGUAGE_FOLLOW_SYSTEM);
return setLocale(context, lang);
}
public static String getLanguage(Context context) {
return getPersistedData(context, LANGUAGE_FOLLOW_SYSTEM);
}
// 保存并设置语言
public static Context setLocale(Context context, String language) {
persist(context, language);
if (LANGUAGE_FOLLOW_SYSTEM.equals(language)) {
// 如果是跟随系统,获取系统当前的 Locale
Locale systemLocale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
systemLocale = Resources.getSystem().getConfiguration().getLocales().get(0);
} else {
systemLocale = Resources.getSystem().getConfiguration().locale;
}
return updateResources(context, systemLocale);
}
return updateResources(context, new Locale(language));
}
private static String getPersistedData(Context context, String defaultLanguage) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
return preferences.getString(KEY_APP_LANGUAGE, defaultLanguage);
}
private static void persist(Context context, String language) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
preferences.edit().putString(KEY_APP_LANGUAGE, language).apply();
}
// 核心适配逻辑:兼容 Android N (7.0) 及以上
@TargetApi(Build.VERSION_CODES.N)
private static Context updateResources(Context context, Locale locale) {
Configuration configuration = context.getResources().getConfiguration();
configuration.setLocale(locale);
configuration.setLayoutDirection(locale); // 适配从右到左的语言(如阿拉伯语),虽然这里只是中英文
// 创建包含新配置的 Context
return context.createConfigurationContext(configuration);
}
}