Browse Source

Play sound when message is received

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic 6 years ago
parent
commit
cd58deedb1

+ 35 - 12
app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java

@@ -27,7 +27,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.Intent;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.BitmapFactory;
-import android.media.RingtoneManager;
+import android.media.MediaPlayer;
 import android.net.Uri;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Bundle;
@@ -39,20 +39,23 @@ import android.util.Log;
 import com.bluelinelabs.logansquare.LoganSquare;
 import com.bluelinelabs.logansquare.LoganSquare;
 import com.evernote.android.job.Job;
 import com.evernote.android.job.Job;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
-import com.nextcloud.talk.utils.ApplicationWideCurrentRoomHolder;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.CallActivity;
 import com.nextcloud.talk.activities.CallActivity;
 import com.nextcloud.talk.activities.MainActivity;
 import com.nextcloud.talk.activities.MainActivity;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
+import com.nextcloud.talk.models.RingtoneSettings;
 import com.nextcloud.talk.models.SignatureVerification;
 import com.nextcloud.talk.models.SignatureVerification;
 import com.nextcloud.talk.models.json.push.DecryptedPushMessage;
 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.NotificationUtils;
 import com.nextcloud.talk.utils.PushUtils;
 import com.nextcloud.talk.utils.PushUtils;
 import com.nextcloud.talk.utils.bundle.BundleKeys;
 import com.nextcloud.talk.utils.bundle.BundleKeys;
 import com.nextcloud.talk.utils.database.user.UserUtils;
 import com.nextcloud.talk.utils.database.user.UserUtils;
+import com.nextcloud.talk.utils.preferences.AppPreferences;
 
 
 import org.parceler.Parcels;
 import org.parceler.Parcels;
 
 
+import java.io.IOException;
 import java.security.InvalidKeyException;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
 import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
 import java.security.PrivateKey;
@@ -72,6 +75,9 @@ public class NotificationJob extends Job {
     @Inject
     @Inject
     UserUtils userUtils;
     UserUtils userUtils;
 
 
+    @Inject
+    AppPreferences appPreferences;
+
     @NonNull
     @NonNull
     @Override
     @Override
     protected Result onRunJob(Params params) {
     protected Result onRunJob(Params params) {
@@ -116,9 +122,9 @@ public class NotificationJob extends Job {
                             int smallIcon;
                             int smallIcon;
                             Bitmap largeIcon;
                             Bitmap largeIcon;
                             String category = "";
                             String category = "";
-                            int priority = Notification.PRIORITY_DEFAULT;
-                            Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+                            int priority = Notification.PRIORITY_HIGH;
                             Intent intent;
                             Intent intent;
+                            Uri soundUri = null;
 
 
                             Bundle bundle = new Bundle();
                             Bundle bundle = new Bundle();
 
 
@@ -145,19 +151,31 @@ public class NotificationJob extends Job {
                             NotificationManager notificationManager =
                             NotificationManager notificationManager =
                                     (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                                     (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
 
 
+                            String ringtonePreferencesString;
                             switch (decryptedPushMessage.getType()) {
                             switch (decryptedPushMessage.getType()) {
                                 case "call":
                                 case "call":
                                     smallIcon = R.drawable.ic_call_white_24dp;
                                     smallIcon = R.drawable.ic_call_white_24dp;
                                     category = Notification.CATEGORY_CALL;
                                     category = Notification.CATEGORY_CALL;
-                                    priority = Notification.PRIORITY_HIGH;
-                                    soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
                                     break;
                                     break;
                                 case "room":
                                 case "room":
                                     smallIcon = R.drawable.ic_notifications_white_24dp;
                                     smallIcon = R.drawable.ic_notifications_white_24dp;
                                     category = Notification.CATEGORY_CALL;
                                     category = Notification.CATEGORY_CALL;
-                                    priority = Notification.PRIORITY_HIGH;
                                     break;
                                     break;
                                 case "chat":
                                 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;
                                     smallIcon = R.drawable.ic_chat_white_24dp;
                                     category = Notification.CATEGORY_MESSAGE;
                                     category = Notification.CATEGORY_MESSAGE;
                                     break;
                                     break;
@@ -177,7 +195,6 @@ public class NotificationJob extends Job {
                                     .setShowWhen(true)
                                     .setShowWhen(true)
                                     .setSubText(signatureVerification.getUserEntity().getDisplayName())
                                     .setSubText(signatureVerification.getUserEntity().getDisplayName())
                                     .setContentTitle(decryptedPushMessage.getSubject())
                                     .setContentTitle(decryptedPushMessage.getSubject())
-                                    .setSound(soundUri)
                                     .setFullScreenIntent(pendingIntent, true)
                                     .setFullScreenIntent(pendingIntent, true)
                                     .setAutoCancel(true);
                                     .setAutoCancel(true);
 
 
@@ -205,7 +222,7 @@ public class NotificationJob extends Job {
                                                             .string.nc_notification_channel_calls), context.getResources()
                                                             .string.nc_notification_channel_calls), context.getResources()
                                                     .getString
                                                     .getString
                                                             (R.string.nc_notification_channel_calls_description), true,
                                                             (R.string.nc_notification_channel_calls_description), true,
-                                            NotificationManager.IMPORTANCE_HIGH, soundUri);
+                                            NotificationManager.IMPORTANCE_HIGH);
 
 
                                     notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_CALLS);
                                     notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_CALLS);
                                 } else {
                                 } else {
@@ -215,7 +232,7 @@ public class NotificationJob extends Job {
                                                             .string.nc_notification_channel_messages), context.getResources()
                                                             .string.nc_notification_channel_messages), context.getResources()
                                                     .getString
                                                     .getString
                                                             (R.string.nc_notification_channel_messages_description), true,
                                                             (R.string.nc_notification_channel_messages_description), true,
-                                            NotificationManager.IMPORTANCE_DEFAULT, soundUri);
+                                            NotificationManager.IMPORTANCE_DEFAULT);
 
 
                                     notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES);
                                     notificationBuilder.setChannelId(NotificationUtils.NOTIFICATION_CHANNEL_MESSAGES);
                                 }
                                 }
@@ -223,8 +240,7 @@ public class NotificationJob extends Job {
                                 notificationBuilder.setGroup(Long.toString(crc32.getValue()));
                                 notificationBuilder.setGroup(Long.toString(crc32.getValue()));
                             }
                             }
 
 
-                            //notificationBuilder.setContentIntent(pendingIntent);
-                            notificationBuilder.setFullScreenIntent(pendingIntent, true);
+                            notificationBuilder.setContentIntent(pendingIntent);
 
 
                             String stringForCrc = decryptedPushMessage.getSubject() + " " + signatureVerification
                             String stringForCrc = decryptedPushMessage.getSubject() + " " + signatureVerification
                                     .getUserEntity().getDisplayName() + " " + signatureVerification.getUserEntity
                                     .getUserEntity().getDisplayName() + " " + signatureVerification.getUserEntity
@@ -235,6 +251,13 @@ public class NotificationJob extends Job {
 
 
                             if (notificationManager != null) {
                             if (notificationManager != null) {
                                 notificationManager.notify((int) crc32.getValue(), notificationBuilder.build());
                                 notificationManager.notify((int) crc32.getValue(), notificationBuilder.build());
+
+                                if (soundUri != null) {
+                                    MediaPlayer mediaPlayer = MediaPlayer.create(context, soundUri);
+                                    mediaPlayer.start();
+                                    mediaPlayer.setOnCompletionListener(MediaPlayer::release);
+
+                                }
                             }
                             }
                         }
                         }
 
 

+ 1 - 12
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.NotificationChannelGroup;
 import android.app.NotificationManager;
 import android.app.NotificationManager;
 import android.graphics.Color;
 import android.graphics.Color;
-import android.media.AudioAttributes;
-import android.net.Uri;
 import android.os.Build;
 import android.os.Build;
 
 
 public class NotificationUtils {
 public class NotificationUtils {
@@ -37,7 +35,7 @@ public class NotificationUtils {
     public static void createNotificationChannel(NotificationManager notificationManager,
     public static void createNotificationChannel(NotificationManager notificationManager,
                                                  String channelId, String channelName,
                                                  String channelId, String channelName,
                                                  String channelDescription, boolean vibrate,
                                                  String channelDescription, boolean vibrate,
-                                                 int importance, Uri soundUri) {
+                                                 int importance) {
 
 
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O
                 && notificationManager.getNotificationChannel(channelId) == null) {
                 && notificationManager.getNotificationChannel(channelId) == null) {
@@ -45,15 +43,6 @@ public class NotificationUtils {
             NotificationChannel channel = new NotificationChannel(channelId, channelName,
             NotificationChannel channel = new NotificationChannel(channelId, channelName,
                     importance);
                     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.setDescription(channelDescription);
             channel.enableLights(vibrate);
             channel.enableLights(vibrate);
             channel.enableVibration(vibrate);
             channel.enableVibration(vibrate);