diff --git a/res/values/strings.xml b/res/values/strings.xml
index b26fbd4dd9..6bcbcb6b2f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -947,6 +947,8 @@
Inactivity timeout interval
Notifications
Enable message notifications
+ New contacts notifications
+ Show a notification for new Signal contacts
LED color
Unknown
LED blink pattern
diff --git a/res/xml/preferences_notifications.xml b/res/xml/preferences_notifications.xml
index 53b371d3ff..c8a48c5184 100644
--- a/res/xml/preferences_notifications.xml
+++ b/res/xml/preferences_notifications.xml
@@ -57,4 +57,10 @@
android:entries="@array/pref_notification_privacy_entries"
android:entryValues="@array/pref_notification_privacy_values"/>
+
+
\ No newline at end of file
diff --git a/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java b/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java
index b59df2370c..9d4aa67e54 100644
--- a/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java
+++ b/src/org/thoughtcrime/securesms/notifications/MessageNotifier.java
@@ -121,6 +121,15 @@ public class MessageNotifier {
@Nullable MasterSecret masterSecret,
boolean includePushDatabase,
long threadId)
+ {
+ updateNotification(context, masterSecret, includePushDatabase, threadId, true);
+ }
+
+ public static void updateNotification(@NonNull Context context,
+ @Nullable MasterSecret masterSecret,
+ boolean includePushDatabase,
+ long threadId,
+ boolean signal)
{
boolean isVisible = visibleThread == threadId;
@@ -141,7 +150,7 @@ public class MessageNotifier {
if (isVisible) {
sendInThreadNotification(context, threads.getRecipientsForThreadId(threadId));
} else {
- updateNotification(context, masterSecret, true, includePushDatabase, 0);
+ updateNotification(context, masterSecret, signal, includePushDatabase, 0);
}
}
diff --git a/src/org/thoughtcrime/securesms/util/DirectoryHelper.java b/src/org/thoughtcrime/securesms/util/DirectoryHelper.java
index 63210ff1c2..f32a9fcaca 100644
--- a/src/org/thoughtcrime/securesms/util/DirectoryHelper.java
+++ b/src/org/thoughtcrime/securesms/util/DirectoryHelper.java
@@ -16,7 +16,6 @@ import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.SessionUtil;
-import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.NotInDirectoryException;
import org.thoughtcrime.securesms.database.TextSecureDirectory;
@@ -32,6 +31,7 @@ import org.whispersystems.textsecure.api.push.ContactTokenDetails;
import org.whispersystems.textsecure.api.util.InvalidNumberException;
import java.io.IOException;
+import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
@@ -213,11 +213,19 @@ public class DirectoryHelper {
@Nullable MasterSecret masterSecret,
@NonNull List newUsers)
{
+ if (!TextSecurePreferences.isNewContactsNotificationEnabled(context)) return;
+
for (String newUser : newUsers) {
if (!SessionUtil.hasSession(context, masterSecret, newUser)) {
IncomingJoinedMessage message = new IncomingJoinedMessage(newUser);
Pair smsAndThreadId = DatabaseFactory.getSmsDatabase(context).insertMessageInbox(message);
- MessageNotifier.updateNotification(context, masterSecret, smsAndThreadId.second);
+
+ int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
+ if (hour >= 9 && hour < 23) {
+ MessageNotifier.updateNotification(context, masterSecret, false, smsAndThreadId.second, true);
+ } else {
+ MessageNotifier.updateNotification(context, masterSecret, false, smsAndThreadId.second, false);
+ }
}
}
}
diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java
index 932e6570ff..4b428d9fac 100644
--- a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java
+++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java
@@ -86,6 +86,7 @@ public class TextSecurePreferences {
public static final String REPEAT_ALERTS_PREF = "pref_repeat_alerts";
public static final String NOTIFICATION_PRIVACY_PREF = "pref_notification_privacy";
+ public static final String NEW_CONTACTS_NOTIFICATIONS = "pref_enable_new_contacts_notifications";
public static final String MEDIA_DOWNLOAD_MOBILE_PREF = "pref_media_download_mobile";
public static final String MEDIA_DOWNLOAD_WIFI_PREF = "pref_media_download_wifi";
@@ -116,6 +117,10 @@ public class TextSecurePreferences {
return new NotificationPrivacyPreference(getStringPreference(context, NOTIFICATION_PRIVACY_PREF, "all"));
}
+ public static boolean isNewContactsNotificationEnabled(Context context) {
+ return getBooleanPreference(context, NEW_CONTACTS_NOTIFICATIONS, true);
+ }
+
public static long getRatingLaterTimestamp(Context context) {
return getLongPreference(context, RATING_LATER_PREF, 0);
}