From 5cd00ccbb5d508d700e13613dec870ca69a4445d Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Thu, 7 Sep 2017 23:26:24 +0200 Subject: [PATCH] Fix language switching for good Maybe :D Fixes #802 --- .../activities/AbstractGBActivity.java | 17 +++++++++++++++-- .../activities/AbstractSettingsActivity.java | 18 ++++++++++++++++-- .../activities/ControlCenterv2.java | 18 ++++++++++++++++-- .../gadgetbridge/activities/GBActivity.java | 2 +- .../activities/SettingsActivity.java | 1 + .../gadgetbridge/util/AndroidUtils.java | 8 -------- 6 files changed, 49 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractGBActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractGBActivity.java index 475031e2..c0d5a009 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractGBActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractGBActivity.java @@ -33,6 +33,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; public abstract class AbstractGBActivity extends AppCompatActivity implements GBActivity { + private boolean isLanguageInvalid = false; public static final int NONE = 0; public static final int NO_ACTIONBAR = 1; @@ -52,8 +53,11 @@ public abstract class AbstractGBActivity extends AppCompatActivity implements GB } }; - public void setLanguage(Locale language, boolean recreate) { - AndroidUtils.setLanguage(this, language, recreate); + public void setLanguage(Locale language, boolean invalidateLanguage) { + if (invalidateLanguage) { + isLanguageInvalid = true; + } + AndroidUtils.setLanguage(this, language); } public static void init(GBActivity activity) { @@ -88,6 +92,15 @@ public abstract class AbstractGBActivity extends AppCompatActivity implements GB super.onCreate(savedInstanceState); } + @Override + protected void onResume() { + super.onResume(); + if (isLanguageInvalid) { + isLanguageInvalid = false; + recreate(); + } + } + @Override protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java index a1ca9913..1cdb0a15 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java @@ -49,6 +49,8 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi private static final Logger LOG = LoggerFactory.getLogger(AbstractSettingsActivity.class); + private boolean isLanguageInvalid = false; + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -152,6 +154,15 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi } } + @Override + protected void onResume() { + super.onResume(); + if (isLanguageInvalid) { + isLanguageInvalid = false; + recreate(); + } + } + @Override protected void onDestroy() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); @@ -210,7 +221,10 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi return super.onOptionsItemSelected(item); } - public void setLanguage(Locale language, boolean recreate) { - AndroidUtils.setLanguage(this, language, recreate); + public void setLanguage(Locale language, boolean invalidateLanguage) { + if (invalidateLanguage) { + isLanguageInvalid = true; + } + AndroidUtils.setLanguage(this, language); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java index 377663d8..171ee015 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java @@ -78,6 +78,8 @@ public class ControlCenterv2 extends AppCompatActivity private GBDeviceAdapterv2 mGBDeviceAdapter; private RecyclerView deviceListView; + private boolean isLanguageInvalid = false; + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -206,6 +208,15 @@ public class ControlCenterv2 extends AppCompatActivity } } + @Override + protected void onResume() { + super.onResume(); + if (isLanguageInvalid) { + isLanguageInvalid = false; + recreate(); + } + } + @Override protected void onDestroy() { unregisterForContextMenu(deviceListView); @@ -311,7 +322,10 @@ public class ControlCenterv2 extends AppCompatActivity ActivityCompat.requestPermissions(this, wantedPermissions.toArray(new String[wantedPermissions.size()]), 0); } - public void setLanguage(Locale language, boolean recreate) { - AndroidUtils.setLanguage(this, language, recreate); + public void setLanguage(Locale language, boolean invalidateLanguage) { + if (invalidateLanguage) { + isLanguageInvalid = true; + } + AndroidUtils.setLanguage(this, language); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java index 7600c8f6..d930359e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java @@ -3,7 +3,7 @@ package nodomain.freeyourgadget.gadgetbridge.activities; import java.util.Locale; public interface GBActivity { - void setLanguage(Locale language, boolean recreate); + void setLanguage(Locale language, boolean invalidateLanguage); void setTheme(int themeId); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index 94419a15..16cfe61e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -159,6 +159,7 @@ public class SettingsActivity extends AbstractSettingsActivity { String newLang = newVal.toString(); try { GBApplication.setLanguage(newLang); + recreate(); } catch (Exception ex) { GB.toast(getApplicationContext(), "Error setting language: " + ex.getLocalizedMessage(), diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java index 06bafd27..067bd602 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java @@ -70,14 +70,6 @@ public class AndroidUtils { } } - public static void setLanguage(Activity activity, Locale language, boolean recreate) { - setLanguage(activity.getBaseContext(), language); - - if (recreate) { - activity.recreate(); - } - } - public static void setLanguage(Context context, Locale language) { Configuration config = new Configuration(); config.setLocale(language);