Skip to content

Commit 701110a

Browse files
committed
优化跟随系统语种的处理逻辑
优化监听系统语种变化实现方式 删除 Android 13 localeConfig 适配
1 parent 497d8eb commit 701110a

16 files changed

+148
-180
lines changed

HelpDoc.md

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -209,11 +209,9 @@ public final class MainActivity extends Activity {
209209
@NonNull
210210
public static Map<String, String> generateLanguageRequestHeader() {
211211
Map<String, String> map = new HashMap<>(1);
212-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
213-
// Android 13 上面语种失效的问题解决方案
214-
// https://developer.android.google.cn/about/versions/13/features/app-languages?hl=zh-cn#consider-header
215-
map.put("Accept-Language", String.valueOf(MultiLanguages.getAppLanguage()));
216-
}
212+
// Android 13 上面语种失效的问题解决方案
213+
// https://developer.android.google.cn/about/versions/13/features/app-languages?hl=zh-cn#consider-header
214+
map.put("Accept-Language", String.valueOf(MultiLanguages.getAppLanguage()));
217215
return map;
218216
}
219217
}

README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
* 项目地址:[Github](https://github.com/getActivity/MultiLanguages)
44

5-
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/MultiLanguages/releases/download/9.0/MultiLanguages.apk)
5+
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/MultiLanguages/releases/download/9.2/MultiLanguages.apk)
66

77
![](picture/demo_code.png)
88

@@ -37,7 +37,7 @@ dependencyResolutionManagement {
3737
```groovy
3838
dependencies {
3939
// 语种切换框架:https://github.com/getActivity/MultiLanguages
40-
implementation 'com.github.getActivity:MultiLanguages:9.0'
40+
implementation 'com.github.getActivity:MultiLanguages:9.2'
4141
}
4242
```
4343

@@ -120,9 +120,6 @@ MultiLanguages.updateAppLanguage(Resources resources);
120120

121121
// 设置默认的语种(越早设置越好)
122122
MultiLanguages.setDefaultLanguage(Locale locale);
123-
124-
// 获取语种系统设置界面(Android 13 及以上才有的)
125-
Intent intent = MultiLanguages.getLanguageSettingIntent();
126123
```
127124

128125
#### 语种变化监听器

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "com.hjq.language.demo"
99
minSdkVersion 16
1010
targetSdkVersion 34
11-
versionCode 90
12-
versionName "9.0"
11+
versionCode 902
12+
versionName "9.2"
1313
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1414
}
1515

@@ -78,7 +78,7 @@ dependencies {
7878
implementation 'com.github.getActivity:TitleBar:10.5'
7979

8080
// 吐司框架:https://github.com/getActivity/Toaster
81-
implementation 'com.github.getActivity:Toaster:12.5'
81+
implementation 'com.github.getActivity:Toaster:12.6'
8282

8383
// 内存泄漏检测:https://github.com/square/leakcanary
8484
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12'

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
android:name=".AppApplication"
1111
android:icon="@mipmap/ic_launcher"
1212
android:label="@string/app_name"
13-
android:localeConfig="@xml/locales_config"
1413
android:networkSecurityConfig="@xml/network_security_config"
1514
android:roundIcon="@mipmap/ic_launcher_round"
1615
android:theme="@style/AppTheme"

app/src/main/java/com/hjq/language/demo/MainActivity.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,9 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
180180
@NonNull
181181
public static Map<String, String> generateLanguageRequestHeader() {
182182
Map<String, String> map = new HashMap<>(1);
183-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
184-
// Android 13 上面语种失效的问题解决方案
185-
// https://developer.android.google.cn/about/versions/13/features/app-languages?hl=zh-cn#consider-header
186-
map.put("Accept-Language", String.valueOf(MultiLanguages.getAppLanguage()));
187-
}
183+
// Android 13 上面语种失效的问题解决方案
184+
// https://developer.android.google.cn/about/versions/13/features/app-languages?hl=zh-cn#consider-header
185+
map.put("Accept-Language", String.valueOf(MultiLanguages.getAppLanguage()));
188186
return map;
189187
}
190188
}

app/src/main/res/xml/locales_config.xml

Lines changed: 0 additions & 7 deletions
This file was deleted.

library/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ android {
55

66
defaultConfig {
77
minSdkVersion 14
8-
versionCode 90
9-
versionName "9.0"
8+
versionCode 902
9+
versionName "9.2"
1010
}
1111

1212
android.libraryVariants.configureEach { variant ->

library/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8"?>
12
<manifest package="com.hjq.language" />
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.hjq.language;
2+
3+
import android.app.Application;
4+
import android.content.ComponentCallbacks;
5+
import android.content.res.Configuration;
6+
7+
/**
8+
* author : Android 轮子哥
9+
* github : https://github.com/getActivity/MultiLanguages
10+
* time : 2019/05/06
11+
* desc : 手机配置变化监听
12+
*/
13+
final class ConfigurationObserver implements ComponentCallbacks {
14+
15+
/**
16+
* 注册系统语种变化监听
17+
*/
18+
static void register(Application application) {
19+
ConfigurationObserver configurationObserver = new ConfigurationObserver();
20+
application.registerComponentCallbacks(configurationObserver);
21+
}
22+
23+
/**
24+
* 手机的配置发生了变化
25+
*/
26+
@Override
27+
public void onConfigurationChanged(Configuration newConfig) {
28+
if (newConfig == null) {
29+
return;
30+
}
31+
// 如果当前是跟随系统语种,就则不往下执行
32+
if (MultiLanguages.isSystemLanguage(MultiLanguages.getApplication())) {
33+
return;
34+
}
35+
// 更新 Application 的配置,否则会出现横竖屏切换之后 Application 的 orientation 没有随之变化的问题
36+
LanguagesUtils.updateConfigurationChanged(MultiLanguages.getApplication(), newConfig);
37+
}
38+
39+
@Override
40+
public void onLowMemory() {}
41+
}

library/src/main/java/com/hjq/language/LanguagesConfig.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package com.hjq.language;
22

3-
import android.app.LocaleManager;
43
import android.content.Context;
54
import android.content.SharedPreferences;
6-
import android.os.Build;
75
import android.text.TextUtils;
86
import java.util.Locale;
97

@@ -44,6 +42,7 @@ static Locale readAppLanguageSetting(Context context) {
4442

4543
String language = getSharedPreferences(context).getString(KEY_LANGUAGE, "");
4644
String country = getSharedPreferences(context).getString(KEY_COUNTRY, "");
45+
4746
if (!TextUtils.isEmpty(language)) {
4847
sCurrentLocale = new Locale(language, country);
4948
return sCurrentLocale;
@@ -54,18 +53,6 @@ static Locale readAppLanguageSetting(Context context) {
5453
return sCurrentLocale;
5554
}
5655

57-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
58-
// 读取用户在《设置 > 系统 > 语言和输入法 > 应用语言》设置的语种
59-
LocaleManager localeManager = context.getSystemService(LocaleManager.class);
60-
if (localeManager != null) {
61-
sCurrentLocale = localeManager.getApplicationLocales().get(0);
62-
// 如果用户没用设置过,则获取到为 null
63-
if (sCurrentLocale != null) {
64-
return sCurrentLocale;
65-
}
66-
}
67-
}
68-
6956
sCurrentLocale = LanguagesUtils.getLocale(context);
7057

7158
return sCurrentLocale;
@@ -100,6 +87,7 @@ public static boolean isSystemLanguage(Context context) {
10087
if (sDefaultLocale != null) {
10188
return false;
10289
}
90+
10391
String language = getSharedPreferences(context).getString(KEY_LANGUAGE, "");
10492
return TextUtils.isEmpty(language);
10593
}

library/src/main/java/com/hjq/language/LanguagesObserver.java

Lines changed: 0 additions & 95 deletions
This file was deleted.

library/src/main/java/com/hjq/language/LanguagesUtils.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
import android.app.LocaleManager;
44
import android.content.Context;
5-
import android.content.Intent;
6-
import android.content.pm.PackageManager;
75
import android.content.res.Configuration;
86
import android.content.res.Resources;
97
import android.os.Build;
@@ -124,22 +122,4 @@ static Resources getLanguageResources(Context context, Locale locale) {
124122
}
125123
return new Resources(context.getAssets(), context.getResources().getDisplayMetrics(), config);
126124
}
127-
128-
/**
129-
* 判断这个意图的 Activity 是否存在
130-
*/
131-
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
132-
static boolean areActivityIntent(Context context, Intent intent) {
133-
if (intent == null) {
134-
return false;
135-
}
136-
// 这里为什么不用 Intent.resolveActivity(intent) != null 来判断呢?
137-
// 这是因为在 OPPO R7 Plus (Android 5.0)会出现误判,明明没有这个 Activity,却返回了 ComponentName 对象
138-
PackageManager packageManager = context.getPackageManager();
139-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
140-
return !packageManager.queryIntentActivities(intent,
141-
PackageManager.ResolveInfoFlags.of(PackageManager.MATCH_DEFAULT_ONLY)).isEmpty();
142-
}
143-
return !packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).isEmpty();
144-
}
145125
}

0 commit comments

Comments
 (0)