diff --git a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java index 2fb467c66..874853fb2 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java @@ -65,6 +65,7 @@ import com.nextcloud.talk.models.json.participants.ParticipantsOverall; import com.nextcloud.talk.models.json.rooms.Room; import com.nextcloud.talk.models.json.rooms.RoomsOverall; import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.DoNotDisturbUtils; import com.nextcloud.talk.utils.MagicFlipView; import com.nextcloud.talk.utils.bundle.BundleKeys; import com.nextcloud.talk.utils.glide.GlideApp; @@ -302,28 +303,30 @@ public class CallNotificationController extends BaseController { runAllThings(); } - String callRingtonePreferenceString = appPreferences.getCallRingtoneUri(); - Uri ringtoneUri; + if (DoNotDisturbUtils.shouldPlaySound()) { + String callRingtonePreferenceString = appPreferences.getCallRingtoneUri(); + Uri ringtoneUri; - if (TextUtils.isEmpty(callRingtonePreferenceString)) { - // play default sound - ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName()+ - "/raw/librem_by_feandesign_call"); - } else { - try { - RingtoneSettings ringtoneSettings = LoganSquare.parse(callRingtonePreferenceString, RingtoneSettings.class); - ringtoneUri = ringtoneSettings.getRingtoneUri(); - } catch (IOException e) { - Log.e(TAG, "Failed to parse ringtone settings"); - ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName()+ + if (TextUtils.isEmpty(callRingtonePreferenceString)) { + // play default sound + ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + "/raw/librem_by_feandesign_call"); + } else { + try { + RingtoneSettings ringtoneSettings = LoganSquare.parse(callRingtonePreferenceString, RingtoneSettings.class); + ringtoneUri = ringtoneSettings.getRingtoneUri(); + } catch (IOException e) { + Log.e(TAG, "Failed to parse ringtone settings"); + ringtoneUri = Uri.parse("android.resource://" + getApplicationContext().getPackageName() + + "/raw/librem_by_feandesign_call"); + } } - } - if (ringtoneUri != null) { - mediaPlayer = MediaPlayer.create(getApplicationContext(), ringtoneUri); - mediaPlayer.setLooping(true); - mediaPlayer.start(); + if (ringtoneUri != null) { + mediaPlayer = MediaPlayer.create(getApplicationContext(), ringtoneUri); + mediaPlayer.setLooping(true); + mediaPlayer.start(); + } } } 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 0db572bac..7cd1f87b9 100644 --- a/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java +++ b/app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java @@ -51,6 +51,7 @@ import com.nextcloud.talk.models.json.push.DecryptedPushMessage; import com.nextcloud.talk.models.json.rooms.Room; import com.nextcloud.talk.models.json.rooms.RoomOverall; import com.nextcloud.talk.utils.ApiUtils; +import com.nextcloud.talk.utils.DoNotDisturbUtils; import com.nextcloud.talk.utils.NotificationUtils; import com.nextcloud.talk.utils.PushUtils; import com.nextcloud.talk.utils.bundle.BundleKeys; @@ -345,7 +346,8 @@ public class NotificationJob extends Job { if (notificationManager != null) { notificationManager.notify((int) crc32.getValue(), notificationBuilder.build()); - if (soundUri != null & !ApplicationWideCurrentRoomHolder.getInstance().isInCall()) { + if (soundUri != null & !ApplicationWideCurrentRoomHolder.getInstance().isInCall() && + DoNotDisturbUtils.shouldPlaySound()) { MediaPlayer mediaPlayer = MediaPlayer.create(context, soundUri); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(MediaPlayer::release); diff --git a/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java b/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java new file mode 100644 index 000000000..0d793f4a6 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/DoNotDisturbUtils.java @@ -0,0 +1,54 @@ +/* + * Nextcloud Talk application + * + * @author Mario Danic + * Copyright (C) 2017-2018 Mario Danic + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.utils; + +import android.app.NotificationManager; +import android.content.Context; +import android.media.AudioManager; +import android.os.Build; + +import com.nextcloud.talk.application.NextcloudTalkApplication; + +public class DoNotDisturbUtils { + private static final String TAG = "DoNotDisturbUtils"; + + public static boolean shouldPlaySound() { + Context context = NextcloudTalkApplication.getSharedApplication().getApplicationContext(); + + NotificationManager notificationManager = + (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + + boolean shouldPlaySound = true; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && notificationManager != null) { + if (notificationManager.getCurrentInterruptionFilter() != NotificationManager.INTERRUPTION_FILTER_ALL) { + shouldPlaySound = false; + } + } + + if (audioManager != null && shouldPlaySound) { + if (audioManager.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) { + shouldPlaySound = false; + } + } + return shouldPlaySound; + } +}