Play sound when message is received

Signed-off-by: Mario Danic <mario@lovelyhq.com>
This commit is contained in:
Mario Danic 2018-06-15 11:28:35 +02:00
parent cd3e403dcb
commit cd58deedb1
2 changed files with 36 additions and 24 deletions

View File

@ -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; int priority = Notification.PRIORITY_HIGH;
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
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.setContentIntent(pendingIntent);
notificationBuilder.setFullScreenIntent(pendingIntent, true);
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);
}
} }
} }

View File

@ -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);