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