diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index ab11afad4..74d8d3349 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -6,6 +6,7 @@
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 5ed406014..ae4d0b4f0 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,9 +4,9 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 3297bc75c..541795deb 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -39,8 +39,8 @@ android {
targetSdkVersion 28
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- versionCode 135
- versionName "8.0.8"
+ versionCode 136
+ versionName "8.0.9"
flavorDimensions "default"
renderscriptTargetApi 19
diff --git a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt
index 5209fef37..32ac819e6 100644
--- a/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt
+++ b/app/src/gplay/java/com/nextcloud/talk/services/firebase/MagicFirebaseMessagingService.kt
@@ -26,6 +26,7 @@ import android.content.Intent
import android.media.AudioAttributes
import android.net.Uri
import android.os.Bundle
+import android.os.Handler
import android.text.TextUtils
import android.util.Base64
import android.util.Log
@@ -89,6 +90,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
var isServiceInForeground: Boolean = false
private var decryptedPushMessage: DecryptedPushMessage? = null
private var signatureVerification: SignatureVerification? = null
+ private var handler: Handler = Handler()
@JvmField
@Inject
@@ -119,6 +121,7 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
isServiceInForeground = false
eventBus?.unregister(this)
stopForeground(true)
+ handler.removeCallbacksAndMessages(null)
super.onDestroy()
}
@@ -247,8 +250,11 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
var inCallOnDifferentDevice = false
ncApi.getPeersForCall(ApiUtils.getCredentials(signatureVerification.userEntity.username, signatureVerification.userEntity.token),
- ApiUtils.getUrlForParticipants(signatureVerification.userEntity.baseUrl,
+ ApiUtils.getUrlForCall(signatureVerification.userEntity.baseUrl,
decryptedPushMessage.id))
+ .takeWhile {
+ isServiceInForeground
+ }
.subscribeOn(Schedulers.io())
.subscribe(object : Observer {
override fun onSubscribe(d: Disposable) {
@@ -256,9 +262,9 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
override fun onNext(participantsOverall: ParticipantsOverall) {
val participantList: List = participantsOverall.ocs.data
- for (participant in participantList) {
- if (participant.participantFlags != Participant.ParticipantFlags.NOT_IN_CALL) {
- hasParticipantsInCall = true
+ hasParticipantsInCall = participantList.isNotEmpty()
+ if (!hasParticipantsInCall) {
+ for (participant in participantList) {
if (participant.userId == signatureVerification.userEntity.userId) {
inCallOnDifferentDevice = true
break
@@ -268,8 +274,11 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
if (!hasParticipantsInCall || inCallOnDifferentDevice) {
stopForeground(true)
+ handler.removeCallbacksAndMessages(null)
} else if (isServiceInForeground) {
- checkIfCallIsActive(signatureVerification, decryptedPushMessage)
+ handler.postDelayed({
+ checkIfCallIsActive(signatureVerification, decryptedPushMessage)
+ }, 5000)
}
}
@@ -277,7 +286,5 @@ class MagicFirebaseMessagingService : FirebaseMessagingService() {
override fun onComplete() {
}
})
-
}
-
}
\ No newline at end of file
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 1900eb214..486418bc2 100644
--- a/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java
+++ b/app/src/main/java/com/nextcloud/talk/controllers/CallNotificationController.java
@@ -29,7 +29,11 @@ import android.graphics.drawable.ColorDrawable;
import android.media.AudioAttributes;
import android.media.MediaPlayer;
import android.net.Uri;
-import android.os.*;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.VibrationEffect;
+import android.os.Vibrator;
import android.renderscript.RenderScript;
import android.text.TextUtils;
import android.util.Log;
@@ -39,11 +43,10 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
+
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
-import autodagger.AutoInjector;
-import butterknife.BindView;
-import butterknife.OnClick;
+
import com.bluelinelabs.conductor.RouterTransaction;
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
import com.bluelinelabs.logansquare.LoganSquare;
@@ -65,33 +68,39 @@ import com.nextcloud.talk.events.CallNotificationClick;
import com.nextcloud.talk.events.ConfigurationChangeEvent;
import com.nextcloud.talk.models.RingtoneSettings;
import com.nextcloud.talk.models.database.UserEntity;
-import com.nextcloud.talk.models.json.participants.Participant;
-import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
import com.nextcloud.talk.models.json.conversations.Conversation;
import com.nextcloud.talk.models.json.conversations.RoomsOverall;
+import com.nextcloud.talk.models.json.participants.Participant;
+import com.nextcloud.talk.models.json.participants.ParticipantsOverall;
import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.DisplayUtils;
import com.nextcloud.talk.utils.DoNotDisturbUtils;
import com.nextcloud.talk.utils.bundle.BundleKeys;
import com.nextcloud.talk.utils.preferences.AppPreferences;
import com.nextcloud.talk.utils.singletons.AvatarStatusCodeHolder;
-import io.reactivex.Observer;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.Disposable;
-import io.reactivex.schedulers.Schedulers;
-import okhttp3.Cache;
+
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.michaelevans.colorart.library.ColorArt;
import org.parceler.Parcels;
-import javax.annotation.Nullable;
-import javax.inject.Inject;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
+import javax.annotation.Nullable;
+import javax.inject.Inject;
+
+import autodagger.AutoInjector;
+import butterknife.BindView;
+import butterknife.OnClick;
+import io.reactivex.Observer;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
+import okhttp3.Cache;
+
@AutoInjector(NextcloudTalkApplication.class)
public class CallNotificationController extends BaseController {
@@ -195,11 +204,10 @@ public class CallNotificationController extends BaseController {
}
private void checkIfAnyParticipantsRemainInRoom() {
- ncApi.getPeersForCall(credentials, ApiUtils.getUrlForParticipants(userBeingCalled.getBaseUrl(),
+ ncApi.getPeersForCall(credentials, ApiUtils.getUrlForCall(userBeingCalled.getBaseUrl(),
currentConversation.getToken()))
.subscribeOn(Schedulers.io())
.takeWhile(observable -> !leavingScreen)
- .retry(3)
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {
@@ -211,10 +219,10 @@ public class CallNotificationController extends BaseController {
boolean hasParticipantsInCall = false;
boolean inCallOnDifferentDevice = false;
List participantList = participantsOverall.getOcs().getData();
- for (Participant participant : participantList) {
- if (participant.getParticipantFlags() != Participant.ParticipantFlags.NOT_IN_CALL) {
- hasParticipantsInCall = true;
+ hasParticipantsInCall = participantList.size() > 0;
+ if (hasParticipantsInCall) {
+ for (Participant participant : participantList) {
if (participant.getUserId().equals(userBeingCalled.getUserId())) {
inCallOnDifferentDevice = true;
break;
@@ -237,7 +245,7 @@ public class CallNotificationController extends BaseController {
@Override
public void onComplete() {
if (!leavingScreen) {
- checkIfAnyParticipantsRemainInRoom();
+ handler.postDelayed(() -> checkIfAnyParticipantsRemainInRoom(), 5000);
}
}
});