From cd58deedb193b1a11f879f4bf0bbab641fb957fd Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 15 Jun 2018 11:28:35 +0200 Subject: [PATCH] Play sound when message is received Signed-off-by: Mario Danic --- .../nextcloud/talk/jobs/NotificationJob.java | 47 ++++++++++++++----- .../talk/utils/NotificationUtils.java | 13 +---- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java b/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java index 9aba20d1d..c8860e8e2 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java @@ -27,7 +27,7 @@ import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; -import android.media.RingtoneManager; +import android.media.MediaPlayer; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -39,20 +39,23 @@ import android.util.Log; import com.bluelinelabs.logansquare.LoganSquare; import com.evernote.android.job.Job; import com.evernote.android.job.util.support.PersistableBundleCompat; -import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder; import com.nextcloud.talk.R; import com.nextcloud.talk.activities.CallActivity; import com.nextcloud.talk.activities.MainActivity; import com.nextcloud.talk.application.NextcloudTalkApplication; +import com.nextcloud.talk.models.RingtoneSettings; import com.nextcloud.talk.models.SignatureVerification; import com.nextcloud.talk.models.json.push.DecryptedPushMessage; +import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder; import com.nextcloud.talk.utils.NotificationUtils; import com.nextcloud.talk.utils.PushUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.database.user.UserUtils; +import com.nextcloud.talk.utils.preferences.AppPreferences; import org.parceler.Parcels; +import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; @@ -72,6 +75,9 @@ public class NotificationJob extends Job { @Inject UserUtils userUtils; + @Inject + AppPreferences appPreferences; + @NonNull @Override protected Result onRunJob(Params params) { @@ -116,9 +122,9 @@ public class NotificationJob extends Job { int smallIcon; Bitmap largeIcon; String category = ""; - int priority = Notification.PRIORITY_DEFAULT; - Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + int priority = Notification.PRIORITY_HIGH; Intent intent; + Uri soundUri = null; Bundle bundle = new Bundle(); @@ -145,19 +151,31 @@ public class NotificationJob extends Job { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + String ringtonePreferencesString; switch (decryptedPushMessage.getType()) { case "call": smallIcon = R.drawable.ic_call_white_24dp; category = Notification.CATEGORY_CALL; - priority = Notification.PRIORITY_HIGH; - soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE); break; case "room": smallIcon = R.drawable.ic_notifications_white_24dp; category = Notification.CATEGORY_CALL; - priority = Notification.PRIORITY_HIGH; break; case "chat": + ringtonePreferencesString = appPreferences.getMessageRingtoneUri(); + if (TextUtils.isEmpty(ringtonePreferencesString)) { + soundUri = Uri.parse("android.resource://" + context.getPackageName() + + "/raw/librem_by_feandesign_message"); + } else { + try { + RingtoneSettings ringtoneSettings = LoganSquare.parse + (ringtonePreferencesString, RingtoneSettings.class); + soundUri = ringtoneSettings.getRingtoneUri(); + } catch (IOException exception) { + soundUri = Uri.parse("android.resource://" + context.getPackageName() + + "/raw/librem_by_feandesign_message"); + } + } smallIcon = R.drawable.ic_chat_white_24dp; category = Notification.CATEGORY_MESSAGE; break; @@ -177,7 +195,6 @@ public class NotificationJob extends Job { .setShowWhen(true) .setSubText(signatureVerification.getUserEntity().getDisplayName()) .setContentTitle(decryptedPushMessage.getSubject()) - .setSound(soundUri) .setFullScreenIntent(pendingIntent, true) .setAutoCancel(true); @@ -205,7 +222,7 @@ public class NotificationJob extends Job { .string.nc_notification_channel_calls), context.getResources() .getString (R.string.nc_notification_channel_calls_description), true, - NotificationManager.IMPORTANCE_HIGH, soundUri); + NotificationManager.IMPORTANCE_HIGH); notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_CALLS); } else { @@ -215,7 +232,7 @@ public class NotificationJob extends Job { .string.nc_notification_channel_messages), context.getResources() .getString (R.string.nc_notification_channel_messages_description), true, - NotificationManager.IMPORTANCE_DEFAULT, soundUri); + NotificationManager.IMPORTANCE_DEFAULT); notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES); } @@ -223,8 +240,7 @@ public class NotificationJob extends Job { notificationBuilder.setGroup(Long.toString(crc32.getValue())); } - //notificationBuilder.setContentIntent(pendingIntent); - notificationBuilder.setFullScreenIntent(pendingIntent, true); + notificationBuilder.setContentIntent(pendingIntent); String stringForCrc = decryptedPushMessage.getSubject() + " " + signatureVerification .getUserEntity().getDisplayName() + " " + signatureVerification.getUserEntity @@ -235,6 +251,13 @@ public class NotificationJob extends Job { if (notificationManager != null) { notificationManager.notify((int) crc32.getValue(), notificationBuilder.build()); + + if (soundUri != null) { + MediaPlayer mediaPlayer = MediaPlayer.create(context, soundUri); + mediaPlayer.start(); + mediaPlayer.setOnCompletionListener(MediaPlayer::release); + + } } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java index 77ddbc4c7..d60ade3ca 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/NotificationUtils.java @@ -25,8 +25,6 @@ import android.app.NotificationChannel; import android.app.NotificationChannelGroup; import android.app.NotificationManager; import android.graphics.Color; -import android.media.AudioAttributes; -import android.net.Uri; import android.os.Build; public class NotificationUtils { @@ -37,7 +35,7 @@ public class NotificationUtils { public static void createNotificationChannel(NotificationManager notificationManager, String channelId, String channelName, String channelDescription, boolean vibrate, - int importance, Uri soundUri) { + int importance) { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O && notificationManager.getNotificationChannel(channelId) == null) { @@ -45,15 +43,6 @@ public class NotificationUtils { NotificationChannel channel = new NotificationChannel(channelId, channelName, importance); - int usage; - - if (channelId.equals(NotificationUtils.NOTIFICATION_CHANNEL_CALLS)) { - usage = AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_REQUEST; - } else { - usage = AudioAttributes.USAGE_NOTIFICATION_COMMUNICATION_INSTANT; - } - - channel.setSound(soundUri, new AudioAttributes.Builder().setUsage(usage).build()); channel.setDescription(channelDescription); channel.enableLights(vibrate); channel.enableVibration(vibrate);