From 73d2c964d44ec6a91534fa4eafaf309b130d3b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Mon, 15 Feb 2021 12:31:51 +0100 Subject: [PATCH 1/2] Make language switching for robust --- .../briarproject/briar/android/BriarApplicationImpl.java | 1 + .../org/briarproject/briar/android/BriarService.java | 1 + .../java/org/briarproject/briar/android/Localizer.java | 2 +- .../briar/android/activity/BaseActivity.java | 1 + .../briar/android/splash/ExpiredActivity.java | 9 +++++++++ 5 files changed, 13 insertions(+), 1 deletion(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java index 64022ec6f..b3bf74595 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarApplicationImpl.java @@ -58,6 +58,7 @@ public class BriarApplicationImpl extends Application Localizer.initialize(prefs); super.attachBaseContext( Localizer.getInstance().setLocale(base)); + Localizer.getInstance().setLocale(this); setTheme(base, prefs); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index a4f4d0b0e..3e2098d71 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -170,6 +170,7 @@ public class BriarService extends Service { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(Localizer.getInstance().setLocale(base)); + Localizer.getInstance().setLocale(this); } private void showStartupFailureNotification(StartResult result) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java index 2b51659bb..eb9c1f431 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java @@ -82,7 +82,7 @@ public class Localizer { Locale.setDefault(locale); if (SDK_INT >= 17) { conf.setLocale(locale); - context.createConfigurationContext(conf); + context = context.createConfigurationContext(conf); } else conf.locale = locale; //noinspection deprecation diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java index 08f196e18..4f7b0fbde 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java @@ -109,6 +109,7 @@ public abstract class BaseActivity extends AppCompatActivity protected void attachBaseContext(Context base) { super.attachBaseContext( Localizer.getInstance().setLocale(base)); + Localizer.getInstance().setLocale(this); } public ActivityComponent getActivityComponent() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java index 7db01bf85..3f8828ce5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/ExpiredActivity.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.splash; +import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -7,6 +8,7 @@ import android.view.View; import android.view.View.OnClickListener; import org.briarproject.briar.R; +import org.briarproject.briar.android.Localizer; import androidx.appcompat.app.AppCompatActivity; @@ -27,6 +29,13 @@ public class ExpiredActivity extends AppCompatActivity findViewById(R.id.download_briar_button).setOnClickListener(this); } + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext( + Localizer.getInstance().setLocale(base)); + Localizer.getInstance().setLocale(this); + } + @Override public void onClick(View v) { Uri uri = Uri.parse("https://briarproject.org/download.html"); From e5bd43469e9918548ae80f04e30b0508716092f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= Date: Mon, 15 Feb 2021 14:47:14 +0100 Subject: [PATCH 2/2] Add Javados to Localizer#setLocale() --- .../briarproject/briar/android/Localizer.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java index eb9c1f431..5e99eba79 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/Localizer.java @@ -68,7 +68,21 @@ public class Localizer { return new Locale(tag); } - // Returns the localized version of context + /* + * Apply localization to the specified context. + * + * It updates the configuration of the context's resources object but can + * also return a new context derived from the context parameter. Hence + * make sure to work with the return value of this method instead of + * the context you passed as a parameter. + * + * This method also has side-effects as it calls Locale#setDefault(). + * + * When using this in attachBaseContext() of Application, Service or + * Activity subclasses, it is important to not only apply this method to the + * base Context parameter received in that method, but also apply it on the + * class itself which also extends Context. + */ public Context setLocale(Context context) { Resources res = context.getResources(); Configuration conf = res.getConfiguration();