From 293a259ef024de34ec951eeb8cce0f8897576e59 Mon Sep 17 00:00:00 2001 From: goapunk <goapunk@riseup.net> Date: Wed, 27 Mar 2019 20:04:29 +0100 Subject: [PATCH] update notifications on system language change --- .../AndroidNotificationManagerImpl.java | 13 ++++++++++ .../briar/android/BriarApplicationImpl.java | 5 ++-- .../briarproject/briar/android/Localizer.java | 25 ++++++++++++++----- .../android/AndroidNotificationManager.java | 3 +++ 4 files changed, 38 insertions(+), 8 deletions(-) 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 cd5871a92d..a7967d58c5 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 69647c3f9e..c5ee1a7734 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 44729bad71..1c3ebcd321 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 eec2b8e9f6..4b3e1bdcb5 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); + } -- GitLab