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