diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index cd5871a92d7c323164a5312787fee2724e15757f..a7967d58c52720a9a9518694bbc4b3007a8639db 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -572,6 +572,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, @UiThread private void updateContactAddedNotification() { + if (contactAddedTotal == 0) return; BriarNotificationBuilder b = new BriarNotificationBuilder(appContext, CONTACT_CHANNEL_ID); b.setSmallIcon(R.drawable.notification_contact_added); @@ -686,4 +687,16 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, public void unblockAllBlogPostNotifications() { androidExecutor.runOnUiThread((Runnable) () -> blockBlogs = false); } + + @Override + public void restartNotifications(boolean locked, boolean mayAlertAgain) { + androidExecutor.runOnUiThread(() -> { + updateForegroundNotification(locked); + updateContactNotification(mayAlertAgain); + updateBlogPostNotification(mayAlertAgain); + updateForumPostNotification(mayAlertAgain); + updateGroupMessageNotification(mayAlertAgain); + updateContactAddedNotification(); + }); + } } 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 69647c3f9e85fbbf25ed684a39e1a4a8c1b7c2d4..c5ee1a773414fd3858eace1769b1b11b7de0f3a0 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 @@ -145,8 +145,9 @@ public class BriarApplicationImpl extends Application @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - Localizer.getInstance() - .applicationConfigurationChanged(this, newConfig); + Localizer.getInstance().applicationConfigurationChanged(this, newConfig, + applicationComponent.androidNotificationManager(), + applicationComponent.lockManager().isLocked()); } private void setTheme(Context ctx, SharedPreferences prefs) { 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 44729bad710379ade6b7a21e91081b5d48aa171f..1c3ebcd3211c3db5dadfc6fafffb1b94a8f633a6 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 @@ -7,6 +7,7 @@ import android.content.res.Resources; import android.support.v4.text.TextUtilsCompat; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.briar.api.android.AndroidNotificationManager; import java.util.Locale; @@ -124,13 +125,23 @@ public class Localizer { Resources.getSystem().getDisplayMetrics()); } - public void applicationConfigurationChanged(Context appContext, - Configuration newConfig) { + private Locale getLocaleFromConfig(Configuration config) { if (SDK_INT >= 24) { - if (newConfig.getLocales().get(0) == locale) return; + return config.getLocales().get(0); } else { - if (newConfig.locale == locale) return; + return config.locale; + } + } + + public void applicationConfigurationChanged(Context appContext, + Configuration newConfig, + AndroidNotificationManager androidNotificationManager, + boolean locked) { + Locale newLocale = getLocaleFromConfig(newConfig); + if (locale == null && newLocale != systemLocale) { + androidNotificationManager.restartNotifications(locked, false); } + if (newLocale == locale) return; setLocaleAndSystemConfiguration(locale); if (SDK_INT < 17) setLocaleLegacy(appContext); } @@ -145,7 +156,8 @@ public class Localizer { public static boolean isLocaleSupported(Locale locale) { if (SDK_INT >= 21) return true; if (locale.getLanguage().equals("ast")) return false; - if (SDK_INT == 15 && locale.getLanguage().equals("hi")) return false; + if (SDK_INT == 15 && locale.getLanguage().equals("hi")) + return false; if (SDK_INT >= 17) return true; return isLeftToRight(locale); } @@ -155,7 +167,8 @@ public class Localizer { // TextUtilsCompat returns the wrong direction for Hebrew on some phones String language = locale.getLanguage(); if (language.equals("iw") || language.equals("he")) return false; - int direction = TextUtilsCompat.getLayoutDirectionFromLocale(locale); + int direction = + TextUtilsCompat.getLayoutDirectionFromLocale(locale); return direction == LAYOUT_DIRECTION_LTR; } diff --git a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java index eec2b8e9f65ec7106d0a4e118914ca7a8dca4948..4b3e1bdcb5a1ba2e24b4a1b59f27f31080559fe3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java +++ b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java @@ -85,4 +85,7 @@ public interface AndroidNotificationManager { void blockAllBlogPostNotifications(); void unblockAllBlogPostNotifications(); + + void restartNotifications(boolean locked, boolean mayAlertAgain); + }