Browse Source

Fixes #238

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

+ 21 - 18
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();
+            }
         }
     }
 

+ 3 - 1
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);

+ 54 - 0
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 <mario@lovelyhq.com>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+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;
+    }
+}