From c1925a4e64ead4fa0d5779cfc260b2b302a4ee94 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Mon, 31 Jul 2017 22:49:05 +0200 Subject: [PATCH] Properly handle and distribute language change #733 Also centralize QUIT handling in GBActivity --- .../gadgetbridge/GBApplication.java | 30 +++++++++++ .../activities/AbstractSettingsActivity.java | 40 ++++++++++++++ .../activities/AppBlacklistActivity.java | 26 ---------- .../activities/ControlCenterv2.java | 9 ++++ .../activities/DbManagementActivity.java | 4 -- .../activities/DebugActivity.java | 5 -- .../activities/FwAppInstallerActivity.java | 5 +- .../gadgetbridge/activities/GBActivity.java | 52 +++++++++++++------ .../activities/SettingsActivity.java | 20 +++++++ .../activities/VibrationActivity.java | 28 ---------- .../appmanager/AppManagerActivity.java | 28 ---------- .../activities/charts/ChartsActivity.java | 4 -- .../gadgetbridge/util/AndroidUtils.java | 13 +++++ 13 files changed, 149 insertions(+), 115 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java index c3654778..2b45bd3b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBApplication.java @@ -24,6 +24,7 @@ import android.app.NotificationManager.Policy; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -32,6 +33,7 @@ import android.os.Build; import android.os.Build.VERSION; import android.preference.PreferenceManager; import android.provider.ContactsContract.PhoneLookup; +import android.support.annotation.Nullable; import android.support.v4.content.LocalBroadcastManager; import android.util.Log; import android.util.TypedValue; @@ -40,6 +42,7 @@ import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; @@ -88,6 +91,7 @@ public class GBApplication extends Application { public static final String ACTION_QUIT = "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.quit"; + public static final String ACTION_LANGUAGE_CHANGE = "nodomain.freeyourgadget.gadgetbridge.gbapplication.action.language_change"; private static GBApplication app; @@ -102,6 +106,7 @@ public class GBApplication extends Application { } } }; + private static Locale language; private DeviceManager deviceManager; @@ -157,6 +162,8 @@ public class GBApplication extends Application { setupExceptionHandler(); deviceManager = new DeviceManager(this); + String language = prefs.getString("language", "default"); + setLanguage(language, null); deviceService = createDeviceService(); loadBlackList(); @@ -468,6 +475,25 @@ public class GBApplication extends Application { editor.apply(); } + public static void setLanguage(String lang, @Nullable Context baseContext) { + if (lang.equals("default")) { + language = Locale.getDefault(); + } else { + language = new Locale(lang); + } + Configuration config = new Configuration(); + config.setLocale(language); + + // FIXME: I have no idea what I am doing + context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); + if (baseContext != null) { + baseContext.getResources().updateConfiguration(config, baseContext.getResources().getDisplayMetrics()); + } + Intent intent = new Intent(); + intent.setAction(ACTION_LANGUAGE_CHANGE); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + } + public static LimitedQueue getIDSenderLookup() { return mIDSenderLookup; } @@ -505,4 +531,8 @@ public class GBApplication extends Application { public static GBApplication app() { return app; } + + public static Locale getLanguage() { + return language; + } } 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 d764d083..14d37112 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AbstractSettingsActivity.java @@ -17,20 +17,28 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.os.Bundle; import android.preference.EditTextPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceManager; import android.support.v4.app.NavUtils; +import android.support.v4.content.LocalBroadcastManager; import android.text.InputType; import android.view.MenuItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.Locale; + import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; /** * A settings activity with support for preferences directly displaying their value. @@ -42,6 +50,22 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi private static final Logger LOG = LoggerFactory.getLogger(AbstractSettingsActivity.class); + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + switch (action) { + case GBApplication.ACTION_LANGUAGE_CHANGE: + setLanguage(GBApplication.getLanguage()); + break; + case GBApplication.ACTION_QUIT: + finish(); + break; + } + } + }; + + /** * A preference value change listener that updates the preference's summary * to reflect its new value. @@ -110,6 +134,12 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi } else { setTheme(R.style.GadgetbridgeTheme); } + + IntentFilter filterLocal = new IntentFilter(); + filterLocal.addAction(GBApplication.ACTION_QUIT); + filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE); + LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal); + super.onCreate(savedInstanceState); } @@ -127,6 +157,12 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi } } + @Override + protected void onDestroy() { + LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); + super.onDestroy(); + } + /** * Subclasses should reimplement this to return the keys of those * preferences which should print its values as a summary below the @@ -178,4 +214,8 @@ public abstract class AbstractSettingsActivity extends AppCompatPreferenceActivi } return super.onOptionsItemSelected(item); } + + private void setLanguage(Locale language) { + AndroidUtils.setLanguage(this, language); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppBlacklistActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppBlacklistActivity.java index fb49fee7..5c3c1014 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppBlacklistActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/AppBlacklistActivity.java @@ -17,13 +17,8 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.support.v4.app.NavUtils; -import android.support.v4.content.LocalBroadcastManager; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; @@ -32,7 +27,6 @@ import android.view.MenuItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.adapter.AppBlacklistAdapter; @@ -42,16 +36,6 @@ public class AppBlacklistActivity extends GBActivity { private AppBlacklistAdapter appBlacklistAdapter; - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - if (action.equals(GBApplication.ACTION_QUIT)) { - finish(); - } - } - }; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -78,10 +62,6 @@ public class AppBlacklistActivity extends GBActivity { return true; } }); - - IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); - LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); } @Override @@ -93,10 +73,4 @@ public class AppBlacklistActivity extends GBActivity { } return super.onOptionsItemSelected(item); } - - @Override - protected void onDestroy() { - LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); - super.onDestroy(); - } } 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 63865ad8..7e582b04 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java @@ -49,6 +49,7 @@ import android.widget.Toast; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import de.cketti.library.changelog.ChangeLog; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -56,6 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.adapter.GBDeviceAdapterv2; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; +import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; @@ -80,6 +82,9 @@ public class ControlCenterv2 extends AppCompatActivity public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { + case GBApplication.ACTION_LANGUAGE_CHANGE: + setLanguage(GBApplication.getLanguage()); + break; case GBApplication.ACTION_QUIT: finish(); break; @@ -170,6 +175,7 @@ public class ControlCenterv2 extends AppCompatActivity registerForContextMenu(deviceListView); IntentFilter filterLocal = new IntentFilter(); + filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE); filterLocal.addAction(GBApplication.ACTION_QUIT); filterLocal.addAction(DeviceManager.ACTION_DEVICES_CHANGED); LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal); @@ -295,4 +301,7 @@ public class ControlCenterv2 extends AppCompatActivity ActivityCompat.requestPermissions(this, wantedPermissions.toArray(new String[wantedPermissions.size()]), 0); } + private void setLanguage(Locale language) { + AndroidUtils.setLanguage(this, language); + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java index 621ccf55..2085f761 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DbManagementActivity.java @@ -19,7 +19,6 @@ package nodomain.freeyourgadget.gadgetbridge.activities; import android.app.AlertDialog; import android.content.DialogInterface; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.database.sqlite.SQLiteOpenHelper; import android.os.Bundle; @@ -62,9 +61,6 @@ public class DbManagementActivity extends GBActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_db_management); - IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); - dbPath = (TextView) findViewById(R.id.activity_db_management_path); dbPath.setText(getExternalPath()); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java index f3a9ebc1..a88df172 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DebugActivity.java @@ -78,10 +78,6 @@ public class DebugActivity extends GBActivity { @Override public void onReceive(Context context, Intent intent) { switch (intent.getAction()) { - case GBApplication.ACTION_QUIT: { - finish(); - break; - } case ACTION_REPLY: { Bundle remoteInput = RemoteInput.getResultsFromIntent(intent); CharSequence reply = remoteInput.getCharSequence(EXTRA_REPLY); @@ -104,7 +100,6 @@ public class DebugActivity extends GBActivity { setContentView(R.layout.activity_debug); IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); filter.addAction(ACTION_REPLY); filter.addAction(DeviceService.ACTION_HEARTRATE_MEASUREMENT); LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FwAppInstallerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FwAppInstallerActivity.java index 1abd25a3..f1f5ac22 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FwAppInstallerActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/FwAppInstallerActivity.java @@ -76,9 +76,7 @@ public class FwAppInstallerActivity extends GBActivity implements InstallActivit @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); - if (GBApplication.ACTION_QUIT.equals(action)) { - finish(); - } else if (GBDevice.ACTION_DEVICE_CHANGED.equals(action)) { + if (GBDevice.ACTION_DEVICE_CHANGED.equals(action)) { device = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE); if (device != null) { refreshBusyState(device); @@ -154,7 +152,6 @@ public class FwAppInstallerActivity extends GBActivity implements InstallActivit detailsListView.setAdapter(mDetailsItemAdapter); setInstallEnabled(false); IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); filter.addAction(GBDevice.ACTION_DEVICE_CHANGED); filter.addAction(GB.ACTION_DISPLAY_MESSAGE); LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); 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 2bc57d45..09246d6d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/GBActivity.java @@ -17,44 +17,64 @@ package nodomain.freeyourgadget.gadgetbridge.activities; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.content.res.Configuration; import android.os.Bundle; +import android.os.LocaleList; +import android.support.v4.content.LocalBroadcastManager; import android.support.v7.app.AppCompatActivity; import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.devices.DeviceManager; +import nodomain.freeyourgadget.gadgetbridge.util.AndroidUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class GBActivity extends AppCompatActivity { - private void setLanguage(String language) { - Locale locale; - if (language.equals("default")) { - locale = Locale.getDefault(); - } else { - locale = new Locale(language); - } - Configuration config = new Configuration(); - config.locale = locale; - // FIXME: I have no idea what I am doing - getApplicationContext().getResources().updateConfiguration(config, getApplicationContext().getResources().getDisplayMetrics()); - getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + switch (action) { + case GBApplication.ACTION_LANGUAGE_CHANGE: + setLanguage(GBApplication.getLanguage()); + break; + case GBApplication.ACTION_QUIT: + finish(); + break; + } + } + }; + + private void setLanguage(Locale language) { + AndroidUtils.setLanguage(this, language); } @Override protected void onCreate(Bundle savedInstanceState) { + IntentFilter filterLocal = new IntentFilter(); + filterLocal.addAction(GBApplication.ACTION_QUIT); + filterLocal.addAction(GBApplication.ACTION_LANGUAGE_CHANGE); + LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal); + if (GBApplication.isDarkThemeEnabled()) { setTheme(R.style.GadgetbridgeThemeDark); } else { setTheme(R.style.GadgetbridgeTheme); } - - Prefs prefs = GBApplication.getPrefs(); - String language = prefs.getString("language", "default"); - setLanguage(language); super.onCreate(savedInstanceState); } + + @Override + protected void onDestroy() { + LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); + super.onDestroy(); + } } 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 b97e2ae7..35c7f4c7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -143,6 +143,26 @@ public class SettingsActivity extends AbstractSettingsActivity { }); + pref = findPreference("language"); + pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + String newLang = newVal.toString(); + try { + GBApplication.setLanguage(newLang, getBaseContext()); +// recreate(); + } catch (Exception ex) { + GB.toast(getApplicationContext(), + "Error setting language: " + ex.getLocalizedMessage(), + Toast.LENGTH_LONG, + GB.ERROR, + ex); + } + return true; + } + + }); + if (!GBApplication.isRunningMarshmallowOrLater()) { pref = findPreference("notification_filter"); PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications"); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/VibrationActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/VibrationActivity.java index 73ab6dcd..e3fb2557 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/VibrationActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/VibrationActivity.java @@ -16,12 +16,7 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.activities; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; -import android.support.v4.content.LocalBroadcastManager; import android.widget.SeekBar; import org.slf4j.Logger; @@ -33,17 +28,6 @@ import nodomain.freeyourgadget.gadgetbridge.R; public class VibrationActivity extends GBActivity { private static final Logger LOG = LoggerFactory.getLogger(VibrationActivity.class); - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getAction()) { - case GBApplication.ACTION_QUIT: { - finish(); - break; - } - } - } - }; private SeekBar seekBar; @Override @@ -51,11 +35,6 @@ public class VibrationActivity extends GBActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_vibration); - IntentFilter filter = new IntentFilter(); - filter.addAction(GBApplication.ACTION_QUIT); - LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filter); - registerReceiver(mReceiver, filter); - seekBar = (SeekBar) findViewById(R.id.vibration_seekbar); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override @@ -77,11 +56,4 @@ public class VibrationActivity extends GBActivity { } }); } - - @Override - protected void onDestroy() { - super.onDestroy(); - LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); - unregisterReceiver(mReceiver); - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java index ecde5017..00c9a8e1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/appmanager/AppManagerActivity.java @@ -18,16 +18,12 @@ package nodomain.freeyourgadget.gadgetbridge.activities.appmanager; import android.app.Activity; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.NavUtils; -import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.ViewPager; import android.view.MenuItem; import android.view.View; @@ -44,7 +40,6 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; -import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity; @@ -60,18 +55,6 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { private GBDevice mGBDevice = null; - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String action = intent.getAction(); - switch (action) { - case GBApplication.ACTION_QUIT: - finish(); - break; - } - } - }; - public GBDevice getGBDevice() { return mGBDevice; } @@ -102,11 +85,6 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { } }); - IntentFilter filterLocal = new IntentFilter(); - filterLocal.addAction(GBApplication.ACTION_QUIT); - filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED); - LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal); - // Set up the ViewPager with the sections adapter. ViewPager viewPager = (ViewPager) findViewById(R.id.appmanager_pager); if (viewPager != null) { @@ -217,10 +195,4 @@ public class AppManagerActivity extends AbstractGBFragmentActivity { startActivity(startIntent); } } - - @Override - protected void onDestroy() { - LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); - super.onDestroy(); - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java index 9887b0e9..2d6cf205 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java @@ -102,9 +102,6 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts public void onReceive(Context context, Intent intent) { String action = intent.getAction(); switch (action) { - case GBApplication.ACTION_QUIT: - finish(); - break; case GBDevice.ACTION_DEVICE_CHANGED: GBDevice dev = intent.getParcelableExtra(GBDevice.EXTRA_DEVICE); refreshBusyState(dev); @@ -136,7 +133,6 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts initDates(); IntentFilter filterLocal = new IntentFilter(); - filterLocal.addAction(GBApplication.ACTION_QUIT); filterLocal.addAction(GBDevice.ACTION_DEVICE_CHANGED); LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, filterLocal); 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 be73458e..9c3af56f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/AndroidUtils.java @@ -16,12 +16,16 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.util; +import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; +import android.content.res.Configuration; import android.os.ParcelUuid; import android.os.Parcelable; import android.support.v4.content.LocalBroadcastManager; +import java.util.Locale; + public class AndroidUtils { public static ParcelUuid[] toParcelUUids(Parcelable[] uuids) { if (uuids == null) { @@ -61,4 +65,13 @@ public class AndroidUtils { return false; } } + + public static void setLanguage(Activity activity, Locale language) { + Configuration config = new Configuration(); + config.setLocale(language); + + // FIXME: I have no idea what I am doing + activity.getBaseContext().getResources().updateConfiguration(config, activity.getBaseContext().getResources().getDisplayMetrics()); + activity.recreate(); + } }