diff --git a/app/src/main/java/com/hippo/content/ContextLocalWrapper.java b/app/src/main/java/com/hippo/content/ContextLocalWrapper.java deleted file mode 100644 index 70180dab4..000000000 --- a/app/src/main/java/com/hippo/content/ContextLocalWrapper.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2018 Hippo Seven - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.hippo.content; - -/* - * Created by Hippo on 2018/3/27. - */ - -import android.content.Context; -import android.content.ContextWrapper; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Build; -import android.os.LocaleList; - -import java.util.Locale; - -public class ContextLocalWrapper extends ContextWrapper { - - public ContextLocalWrapper(Context base) { - super(base); - } - - public static ContextLocalWrapper wrap(Context context, Locale newLocale) { - Resources res = context.getResources(); - Configuration configuration = res.getConfiguration(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - configuration.setLocale(newLocale); - - LocaleList localeList = new LocaleList(newLocale); - LocaleList.setDefault(localeList); - configuration.setLocales(localeList); - - context = context.createConfigurationContext(configuration); - - } else { - configuration.setLocale(newLocale); - context = context.createConfigurationContext(configuration); - - } - - return new ContextLocalWrapper(context); - } -} diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index 89e2e90df..926a44ff8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -27,7 +27,6 @@ import androidx.annotation.Nullable; import androidx.annotation.StyleRes; import androidx.appcompat.app.AppCompatActivity; -import com.hippo.content.ContextLocalWrapper; import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; @@ -118,6 +117,26 @@ public abstract class EhActivity extends AppCompatActivity { @Override protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + applyOverrideConfiguration(new Configuration()); + } + + @Override + public void applyOverrideConfiguration(Configuration newConfig) { + super.applyOverrideConfiguration(updateConfigurationIfSupported(newConfig)); + } + + private Configuration updateConfigurationIfSupported(Configuration config) { + // Configuration.getLocales is added after 24 and Configuration.locale is deprecated in 24 + if (Build.VERSION.SDK_INT >= 24) { + if (!config.getLocales().isEmpty()) { + return config; + } + } else { + if (config.locale != null) { + return config; + } + } Locale locale = null; String language = Settings.getAppLanguage(); if (language != null && !language.equals("system")) { @@ -134,9 +153,9 @@ public abstract class EhActivity extends AppCompatActivity { Configuration configuration = res.getConfiguration(); locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? configuration.getLocales().get(0) : configuration.locale; } - - newBase = ContextLocalWrapper.wrap(newBase, locale); - - super.attachBaseContext(newBase); + if (locale != null) { + config.setLocale(locale); + } + return config; } }