From dcecbae343bd3e40b0da4141edc8c3709b4ccbf5 Mon Sep 17 00:00:00 2001 From: str4d Date: Fri, 29 May 2015 03:25:33 +0000 Subject: [PATCH] Configurable language, part 3 --- .../bote/android/config/SettingsActivity.java | 4 +++ .../i2p/bote/android/service/BoteService.java | 26 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/app/src/main/java/i2p/bote/android/config/SettingsActivity.java b/app/src/main/java/i2p/bote/android/config/SettingsActivity.java index 12c45e7..6a80d1a 100644 --- a/app/src/main/java/i2p/bote/android/config/SettingsActivity.java +++ b/app/src/main/java/i2p/bote/android/config/SettingsActivity.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.preference.Preference; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; +import android.support.v4.content.LocalBroadcastManager; import android.support.v4.preference.PreferenceFragment; import android.support.v7.widget.Toolbar; @@ -13,6 +14,7 @@ import i2p.bote.android.BoteActivityBase; import i2p.bote.android.EmailListActivity; import i2p.bote.android.R; import i2p.bote.android.identities.IdentityListActivity; +import i2p.bote.android.service.BoteService; public class SettingsActivity extends BoteActivityBase implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -67,6 +69,8 @@ public class SettingsActivity extends BoteActivityBase implements public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("pref_language")) { notifyLocaleChanged(); + Intent intent = new Intent(BoteService.LOCAL_BROADCAST_LOCALE_CHANGED); + LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } } diff --git a/app/src/main/java/i2p/bote/android/service/BoteService.java b/app/src/main/java/i2p/bote/android/service/BoteService.java index e459462..ced10ea 100644 --- a/app/src/main/java/i2p/bote/android/service/BoteService.java +++ b/app/src/main/java/i2p/bote/android/service/BoteService.java @@ -4,14 +4,17 @@ import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.ServiceConnection; import android.graphics.Bitmap; import android.os.IBinder; import android.os.RemoteException; import android.support.v4.app.NotificationCompat; +import android.support.v4.content.LocalBroadcastManager; import net.i2p.android.router.service.IRouterState; import net.i2p.android.router.service.IRouterStateCallback; @@ -35,6 +38,7 @@ import i2p.bote.android.R; import i2p.bote.android.ViewEmailActivity; import i2p.bote.android.service.Init.RouterChoice; import i2p.bote.android.util.BoteHelper; +import i2p.bote.android.util.LocaleManager; import i2p.bote.email.Email; import i2p.bote.fileencryption.PasswordException; import i2p.bote.folder.EmailFolder; @@ -43,13 +47,33 @@ import i2p.bote.network.NetworkStatus; import i2p.bote.network.NetworkStatusListener; public class BoteService extends Service implements NetworkStatusListener, NewEmailListener { + /** + * The locale has just changed. + */ + public static final String LOCAL_BROADCAST_LOCALE_CHANGED = "i2p.bote.android.LOCAL_BROADCAST_LOCALE_CHANGED"; + public static final String ROUTER_CHOICE = "router_choice"; public static final int NOTIF_ID_SERVICE = 8073; public static final int NOTIF_ID_NEW_EMAIL = 80739047; + private LocaleManager localeManager = new LocaleManager(); + RouterChoice mRouterChoice; NotificationCompat.Builder mStatusBuilder; + @Override + public void onCreate() { + LocalBroadcastManager.getInstance(this).registerReceiver(onLocaleChanged, new IntentFilter(LOCAL_BROADCAST_LOCALE_CHANGED)); + } + + private BroadcastReceiver onLocaleChanged = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + localeManager.updateServiceLocale(BoteService.this); + networkStatusChanged(); + } + }; + @Override public int onStartCommand(Intent intent, int flags, int startId) { mRouterChoice = (RouterChoice) intent.getSerializableExtra(ROUTER_CHOICE); @@ -104,6 +128,8 @@ public class BoteService extends Service implements NetworkStatusListener, NewEm } mTriedBindState = false; + LocalBroadcastManager.getInstance(this).unregisterReceiver(onLocaleChanged); + I2PBote.getInstance().removeNetworkStatusListener(this); I2PBote.getInstance().removeNewEmailListener(this); new Thread(new Runnable() {