diff --git a/res/values/strings.xml b/res/values/strings.xml index e40f7e2236..c5eef2dd06 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -674,6 +674,7 @@ App updates Other Messages + Unknown Quick response unavailable when Signal is locked! diff --git a/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java b/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java index 021208e660..da1c4f890b 100644 --- a/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java +++ b/src/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java @@ -247,6 +247,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { if (oldVersion < NOTIFICATION_CHANNELS) { db.execSQL("ALTER TABLE recipient_preferences ADD COLUMN notification_channel TEXT DEFAULT NULL"); + NotificationChannels.create(context); try (Cursor cursor = db.rawQuery("SELECT recipient_ids, system_display_name, signal_profile_name, notification, vibrate FROM recipient_preferences WHERE notification NOT NULL OR vibrate != 0", null)) { while (cursor != null && cursor.moveToNext()) { @@ -257,7 +258,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper { String messageSound = cursor.getString(cursor.getColumnIndexOrThrow("notification")); Uri messageSoundUri = messageSound != null ? Uri.parse(messageSound) : null; int vibrateState = cursor.getInt(cursor.getColumnIndexOrThrow("vibrate")); - String displayName = NotificationChannels.getChannelDisplayNameFor(systemName, profileName, address); + String displayName = NotificationChannels.getChannelDisplayNameFor(context, systemName, profileName, address); boolean vibrateEnabled = vibrateState == 0 ? TextSecurePreferences.isNotificationVibrateEnabled(context) : vibrateState == 1; String channelId = NotificationChannels.createChannelFor(context, address, displayName, messageSoundUri, vibrateEnabled); diff --git a/src/org/thoughtcrime/securesms/notifications/NotificationChannels.java b/src/org/thoughtcrime/securesms/notifications/NotificationChannels.java index 1dd6b34afd..591ffef654 100644 --- a/src/org/thoughtcrime/securesms/notifications/NotificationChannels.java +++ b/src/org/thoughtcrime/securesms/notifications/NotificationChannels.java @@ -86,8 +86,16 @@ public class NotificationChannels { return Build.VERSION.SDK_INT >= 26; } - public static String getChannelDisplayNameFor(@Nullable String systemName, @Nullable String profileName, @NonNull Address address) { - return TextUtils.isEmpty(systemName) ? (TextUtils.isEmpty(profileName) ? address.serialize() : profileName) : systemName; + public static @NonNull String getChannelDisplayNameFor(@NonNull Context context, @Nullable String systemName, @Nullable String profileName, @NonNull Address address) { + if (!TextUtils.isEmpty(systemName)) { + return systemName; + } else if (!TextUtils.isEmpty(profileName)) { + return profileName; + } else if (!TextUtils.isEmpty(address.serialize())) { + return address.serialize(); + } else { + return context.getString(R.string.NotificationChannel_missing_display_name); + } } /** @@ -97,7 +105,7 @@ public class NotificationChannels { public static String createChannelFor(@NonNull Context context, @NonNull Recipient recipient) { VibrateState vibrateState = recipient.getMessageVibrate(); boolean vibrationEnabled = vibrateState == VibrateState.DEFAULT ? TextSecurePreferences.isNotificationVibrateEnabled(context) : vibrateState == VibrateState.ENABLED; - String displayName = getChannelDisplayNameFor(recipient.getName(), recipient.getProfileName(), recipient.getAddress()); + String displayName = getChannelDisplayNameFor(context, recipient.getName(), recipient.getProfileName(), recipient.getAddress()); return createChannelFor(context, recipient.getAddress(), displayName, recipient.getMessageRingtone(context), vibrationEnabled); } @@ -121,9 +129,12 @@ public class NotificationChannels { setLedPreference(channel, TextSecurePreferences.getNotificationLedColor(context)); channel.setGroup(CATEGORY_MESSAGES); channel.enableVibration(vibrationEnabled); - channel.setSound(messageSound, new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT) - .build()); + + if (messageSound != null) { + channel.setSound(messageSound, new AudioAttributes.Builder().setContentType(AudioAttributes.CONTENT_TYPE_UNKNOWN) + .setUsage(AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT) + .build()); + } NotificationManager notificationManager = context.getSystemService(NotificationManager.class); if (notificationManager == null) { @@ -213,7 +224,7 @@ public class NotificationChannels { } NotificationChannel channel = new NotificationChannel(recipient.getNotificationChannel(context), - getChannelDisplayNameFor(recipient.getName(), recipient.getProfileName(), recipient.getAddress()), + getChannelDisplayNameFor(context, recipient.getName(), recipient.getProfileName(), recipient.getAddress()), NotificationManager.IMPORTANCE_HIGH); channel.setGroup(CATEGORY_MESSAGES); notificationManager.createNotificationChannel(channel);