ソースを参照

fix crash when joining call while silent ringtone is set

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.nextcloud.talk2, PID: 10874
    java.lang.NullPointerException: uri param can not be null.
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1058)
        at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1021)
        at com.nextcloud.talk.activities.CallActivity.playCallingSound(CallActivity.java:2643)

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 2 年 前
コミット
3e6c846d62

+ 30 - 28
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -1485,20 +1485,20 @@ public class CallActivity extends CallBaseActivity {
                                 .takeWhile(observable -> isConnectionEstablished())
                                 .takeWhile(observable -> isConnectionEstablished())
                                 .doOnNext(value -> delayOnError.set(0))
                                 .doOnNext(value -> delayOnError.set(0))
                                 .retryWhen(errors -> errors
                                 .retryWhen(errors -> errors
-                                    .flatMap(error -> {
-                                        if (!isConnectionEstablished()) {
-                                            return Observable.error(error);
-                                        }
-
-                                        if (delayOnError.get() == 0) {
-                                            delayOnError.set(1);
-                                        } else if (delayOnError.get() < 16) {
-                                            delayOnError.set(delayOnError.get() * 2);
-                                        }
-
-                                        return Observable.timer(delayOnError.get(), TimeUnit.SECONDS);
-                                    })
-                                )
+                                               .flatMap(error -> {
+                                                   if (!isConnectionEstablished()) {
+                                                       return Observable.error(error);
+                                                   }
+
+                                                   if (delayOnError.get() == 0) {
+                                                       delayOnError.set(1);
+                                                   } else if (delayOnError.get() < 16) {
+                                                       delayOnError.set(delayOnError.get() * 2);
+                                                   }
+
+                                                   return Observable.timer(delayOnError.get(), TimeUnit.SECONDS);
+                                               })
+                                          )
                                 .subscribe(new Observer<SignalingOverall>() {
                                 .subscribe(new Observer<SignalingOverall>() {
                                     @Override
                                     @Override
                                     public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
                                     public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
@@ -1927,7 +1927,7 @@ public class CallActivity extends CallBaseActivity {
             Log.d(TAG, "   newSession joined: " + sessionId);
             Log.d(TAG, "   newSession joined: " + sessionId);
             getOrCreatePeerConnectionWrapperForSessionIdAndType(sessionId, VIDEO_STREAM_TYPE_VIDEO, false);
             getOrCreatePeerConnectionWrapperForSessionIdAndType(sessionId, VIDEO_STREAM_TYPE_VIDEO, false);
 
 
-	        String userId = userIdsBySessionId.get(sessionId);
+            String userId = userIdsBySessionId.get(sessionId);
 
 
             runOnUiThread(() -> {
             runOnUiThread(() -> {
                 setupVideoStreamForLayout(
                 setupVideoStreamForLayout(
@@ -2637,22 +2637,24 @@ public class CallActivity extends CallBaseActivity {
                                         "/tr110_1_kap8_3_freiton1");
                                         "/tr110_1_kap8_3_freiton1");
         }
         }
 
 
-        mediaPlayer = new MediaPlayer();
-        try {
-            mediaPlayer.setDataSource(this, ringtoneUri);
-            mediaPlayer.setLooping(true);
-            AudioAttributes audioAttributes = new AudioAttributes.Builder().setContentType(
-                    AudioAttributes.CONTENT_TYPE_SONIFICATION)
-                .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
-                .build();
-            mediaPlayer.setAudioAttributes(audioAttributes);
+        if (ringtoneUri != null) {
+            mediaPlayer = new MediaPlayer();
+            try {
+                mediaPlayer.setDataSource(this, ringtoneUri);
+                mediaPlayer.setLooping(true);
+                AudioAttributes audioAttributes = new AudioAttributes.Builder().setContentType(
+                        AudioAttributes.CONTENT_TYPE_SONIFICATION)
+                    .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
+                    .build();
+                mediaPlayer.setAudioAttributes(audioAttributes);
 
 
-            mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start());
+                mediaPlayer.setOnPreparedListener(mp -> mediaPlayer.start());
 
 
-            mediaPlayer.prepareAsync();
+                mediaPlayer.prepareAsync();
 
 
-        } catch (IOException e) {
-            Log.e(TAG, "Failed to play sound");
+            } catch (IOException e) {
+                Log.e(TAG, "Failed to play sound");
+            }
         }
         }
     }
     }