Explorar o código

Some work on calls

Signed-off-by: Mario Danic <mario@lovelyhq.com>
Mario Danic %!s(int64=6) %!d(string=hai) anos
pai
achega
c24ee9e910

+ 7 - 37
app/src/main/java/com/nextcloud/talk/activities/CallActivity.java

@@ -260,6 +260,11 @@ public class CallActivity extends AppCompatActivity {
 
         roomToken = getIntent().getExtras().getString(BundleKeys.KEY_ROOM_TOKEN, "");
         userEntity = Parcels.unwrap(getIntent().getExtras().getParcelable(BundleKeys.KEY_USER_ENTITY));
+
+        if (userEntity == null) {
+            userEntity = userUtils.getCurrentUser();
+        }
+
         callSession = getIntent().getExtras().getString(BundleKeys.KEY_CALL_SESSION, "0");
         credentials = ApiUtils.getCredentials(userEntity.getUsername(), userEntity.getToken());
         isVoiceOnlyCall = getIntent().getExtras().getBoolean(BundleKeys.KEY_CALL_VOICE_ONLY, false);
@@ -280,39 +285,7 @@ public class CallActivity extends AppCompatActivity {
             Log.e(TAG, "Failed to evict cache");
         }
 
-        if (!userEntity.getCurrent()) {
-            userUtils.createOrUpdateUser(null,
-                    null, null, null,
-                    null, true, null, userEntity.getId(), null, null)
-                    .subscribe(new Observer<UserEntity>() {
-                        @Override
-                        public void onSubscribe(Disposable d) {
-
-                        }
-
-                        @Override
-                        public void onNext(UserEntity userEntity) {
-                            userUtils.disableAllUsersWithoutId(userEntity.getId());
-                            if (getIntent().getExtras().containsKey("fromNotification")) {
-                                handleFromNotification();
-                            } else {
-                                initViews();
-                                checkPermissions();
-                            }
-                        }
-
-                        @Override
-                        public void onError(Throwable e) {
-
-                        }
-
-                        @Override
-                        public void onComplete() {
-
-                        }
-                    });
-
-        } else if (getIntent().getExtras().containsKey("fromNotification")) {
+    if (getIntent().getExtras().containsKey(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
             handleFromNotification();
         } else {
             initViews();
@@ -928,7 +901,7 @@ public class CallActivity extends AppCompatActivity {
                         }
                     });
         } else {
-            performCall(null);
+            performCall(callSession);
         }
     }
 
@@ -947,9 +920,6 @@ public class CallActivity extends AppCompatActivity {
                     @Override
                     public void onNext(GenericOverall genericOverall) {
                         inCall = true;
-                        if (callSessionId != null) {
-                            callSession = callSessionId;
-                        }
 
                         // start pinging the call
                         ncApi.pingCall(credentials, ApiUtils.getUrlForCallPing(baseUrl, roomToken))

+ 26 - 11
app/src/main/java/com/nextcloud/talk/activities/MainActivity.java

@@ -33,12 +33,15 @@ import com.bluelinelabs.conductor.Conductor;
 import com.bluelinelabs.conductor.Router;
 import com.bluelinelabs.conductor.RouterTransaction;
 import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
+import com.bluelinelabs.conductor.internal.NoOpControllerChangeHandler;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
+import com.nextcloud.talk.controllers.ChatController;
 import com.nextcloud.talk.controllers.MagicBottomNavigationController;
 import com.nextcloud.talk.controllers.ServerSelectionController;
 import com.nextcloud.talk.controllers.base.providers.ActionBarProvider;
 import com.nextcloud.talk.events.CertificateEvent;
+import com.nextcloud.talk.utils.bundle.BundleKeys;
 import com.nextcloud.talk.utils.database.user.UserUtils;
 import com.nextcloud.talk.utils.ssl.MagicTrustManager;
 import com.yarolegovich.lovelydialog.LovelyStandardDialog;
@@ -104,22 +107,34 @@ public final class MainActivity extends AppCompatActivity implements ActionBarPr
             hasDb = false;
         }
 
-        if (!router.hasRootController()) {
-            if (hasDb) {
-                if (userUtils.anyUserExists()) {
-                    router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
-                            .pushChangeHandler(new HorizontalChangeHandler())
-                            .popChangeHandler(new HorizontalChangeHandler()));
+        if (getIntent().hasExtra(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL)) {
+            router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
+                    .pushChangeHandler(new NoOpControllerChangeHandler())
+                    .popChangeHandler(new NoOpControllerChangeHandler()));
+
+            router.pushController(RouterTransaction.with(new ChatController(getIntent().getExtras()))
+                    .pushChangeHandler(new HorizontalChangeHandler())
+                    .popChangeHandler(new HorizontalChangeHandler()));
+
+        } else {
+
+            if (!router.hasRootController()) {
+                if (hasDb) {
+                    if (userUtils.anyUserExists()) {
+                        router.setRoot(RouterTransaction.with(new MagicBottomNavigationController())
+                                .pushChangeHandler(new HorizontalChangeHandler())
+                                .popChangeHandler(new HorizontalChangeHandler()));
+                    } else {
+                        router.setRoot(RouterTransaction.with(new ServerSelectionController())
+                                .pushChangeHandler(new HorizontalChangeHandler())
+                                .popChangeHandler(new HorizontalChangeHandler()));
+                    }
                 } else {
                     router.setRoot(RouterTransaction.with(new ServerSelectionController())
                             .pushChangeHandler(new HorizontalChangeHandler())
                             .popChangeHandler(new HorizontalChangeHandler()));
-                }
-            } else {
-                router.setRoot(RouterTransaction.with(new ServerSelectionController())
-                        .pushChangeHandler(new HorizontalChangeHandler())
-                        .popChangeHandler(new HorizontalChangeHandler()));
 
+                }
             }
         }
     }

+ 0 - 1
app/src/main/java/com/nextcloud/talk/controllers/CallsListController.java

@@ -494,7 +494,6 @@ public class CallsListController extends BaseController implements SearchView.On
             Room room = callItem.getModel();
             Bundle bundle = new Bundle();
             bundle.putString(BundleKeys.KEY_ROOM_TOKEN, callItem.getModel().getToken());
-            bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(currentUser));
 
             if (room.hasPassword && (room.participantType.equals(Participant.ParticipantType.GUEST) ||
                     room.participantType.equals(Participant.ParticipantType.USER_FOLLOWING_LINK))) {

+ 98 - 75
app/src/main/java/com/nextcloud/talk/controllers/ChatController.java

@@ -71,6 +71,8 @@ import com.nextcloud.talk.models.json.chat.ChatMessage;
 import com.nextcloud.talk.models.json.chat.ChatOverall;
 import com.nextcloud.talk.models.json.generic.GenericOverall;
 import com.nextcloud.talk.models.json.mention.Mention;
+import com.nextcloud.talk.models.json.rooms.Room;
+import com.nextcloud.talk.models.json.rooms.RoomsOverall;
 import com.nextcloud.talk.presenters.MentionAutocompletePresenter;
 import com.nextcloud.talk.utils.ApiUtils;
 import com.nextcloud.talk.utils.KeyboardUtils;
@@ -113,7 +115,7 @@ import retrofit2.Response;
 
 @AutoInjector(NextcloudTalkApplication.class)
 public class ChatController extends BaseController implements MessagesListAdapter.OnLoadMoreListener,
-        MessagesListAdapter.Formatter<Date>, MessagesListAdapter.OnMessageLongClickListener{
+        MessagesListAdapter.Formatter<Date>, MessagesListAdapter.OnMessageLongClickListener {
     private static final String TAG = "ChatController";
 
     @Inject
@@ -150,7 +152,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
     private boolean lookingIntoFuture = false;
 
     private int newMessagesCount = 0;
-    private String senderId;
+    private Boolean startCallFromNotification;
 
     /*
     TODO:
@@ -159,18 +161,69 @@ public class ChatController extends BaseController implements MessagesListAdapte
     public ChatController(Bundle args) {
         super(args);
         setHasOptionsMenu(true);
+        NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
+
+        UserEntity currentUser = userUtils.getCurrentUser();
         this.conversationName = args.getString(BundleKeys.KEY_CONVERSATION_NAME);
         if (args.containsKey(BundleKeys.KEY_USER_ENTITY)) {
             this.conversationUser = Parcels.unwrap(args.getParcelable(BundleKeys.KEY_USER_ENTITY));
+        } else {
+            this.conversationUser = currentUser;
         }
 
-        this.roomToken = args.getString(BundleKeys.KEY_ROOM_TOKEN);
+        this.roomToken = args.getString(BundleKeys.KEY_ROOM_TOKEN, "");
 
         if (args.containsKey(BundleKeys.KEY_ACTIVE_CONVERSATION)) {
             this.currentCall = Parcels.unwrap(args.getParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION));
         }
+
         this.baseUrl = args.getString(BundleKeys.KEY_MODIFIED_BASE_URL, "");
+
+        if (!TextUtils.isEmpty(baseUrl)) {
+            conversationUser.setBaseUrl(baseUrl);
+            conversationUser.setUserId("-1");
+            conversationUser.setDisplayName(currentUser.getDisplayName());
+        } else {
+            baseUrl = conversationUser.getBaseUrl();
+        }
+
         this.roomPassword = args.getString(BundleKeys.KEY_CONVERSATION_PASSWORD, "");
+        this.startCallFromNotification = args.getBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL);
+    }
+
+    private void handleFromNotification() {
+        ncApi.getRooms(credentials, ApiUtils.getUrlForGetRooms(baseUrl))
+                .subscribeOn(Schedulers.newThread())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(new Observer<RoomsOverall>() {
+                    @Override
+                    public void onSubscribe(Disposable d) {
+
+                    }
+
+                    @Override
+                    public void onNext(RoomsOverall roomsOverall) {
+                        for (Room room : roomsOverall.getOcs().getData()) {
+                            if (roomToken.equals(room.getRoomId())) {
+                                roomToken = room.getToken();
+                                break;
+                            }
+                        }
+
+                        setupMentionAutocomplete();
+                        joinRoomWithPassword();
+                    }
+
+                    @Override
+                    public void onError(Throwable e) {
+
+                    }
+
+                    @Override
+                    public void onComplete() {
+
+                    }
+                });
     }
 
     @Override
@@ -181,16 +234,9 @@ public class ChatController extends BaseController implements MessagesListAdapte
     @Override
     protected void onViewBound(@NonNull View view) {
         super.onViewBound(view);
-        NextcloudTalkApplication.getSharedApplication().getComponentApplication().inject(this);
 
         boolean adapterWasNull = false;
 
-        if (conversationUser != null && conversationUser.getUserId() != null) {
-            senderId = conversationUser.getUserId();
-        } else {
-            senderId = "-1";
-        }
-
         if (adapter == null) {
 
             try {
@@ -207,7 +253,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
             holdersConfig.setOutcoming(MagicOutcomingTextMessageViewHolder.class,
                     R.layout.item_custom_outcoming_text_message);
 
-            adapter = new MessagesListAdapter<>(senderId, holdersConfig, new ImageLoader() {
+            adapter = new MessagesListAdapter<>(conversationUser.getUserId(), holdersConfig, new ImageLoader() {
                 @Override
                 public void loadImage(ImageView imageView, String url) {
                     GlideApp.with(NextcloudTalkApplication.getSharedApplication().getApplicationContext())
@@ -269,7 +315,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
             }
         });
 
-        setupMentionAutocomplete();
 
         messageInput.getInputEditText().setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
         messageInput.setInputListener(input -> {
@@ -277,44 +322,15 @@ public class ChatController extends BaseController implements MessagesListAdapte
             return true;
         });
 
-        if (adapterWasNull) {
-            UserEntity currentUser = userUtils.getCurrentUser();
-            if (conversationUser != null && !currentUser.equals(conversationUser)) {
-                userUtils.createOrUpdateUser(null,
-                        null, null, null,
-                        null, true, null, currentUser.getId(), null, null)
-                        .subscribe(new Observer<UserEntity>() {
-                            @Override
-                            public void onSubscribe(Disposable d) {
-
-                            }
-
-                            @Override
-                            public void onNext(UserEntity userEntity) {
-                                joinRoomWithPassword();
-                            }
-
-                            @Override
-                            public void onError(Throwable e) {
-
-                            }
-
-                            @Override
-                            public void onComplete() {
-
-                            }
-                        });
-            } else {
-                if (conversationUser == null) {
-                    conversationUser = new UserEntity();
-                    conversationUser.setDisplayName(currentUser.getDisplayName());
-                    conversationUser.setBaseUrl(baseUrl);
-                }
-                joinRoomWithPassword();
-            }
+        if (adapterWasNull && startCallFromNotification == null) {
+            setupMentionAutocomplete();
+            joinRoomWithPassword();
+        } else if (adapterWasNull) {
+            handleFromNotification();
         }
     }
 
+
     private void setupMentionAutocomplete() {
         float elevation = 6f;
         Drawable backgroundDrawable = new ColorDrawable(Color.WHITE);
@@ -387,11 +403,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
             password = roomPassword;
         }
 
-        if (TextUtils.isEmpty(baseUrl)) {
-            baseUrl = conversationUser.getBaseUrl();
-        }
-
-        if (TextUtils.isEmpty(conversationUser.getUserId())) {
+        if (conversationUser.getUserId().equals("-1")) {
             credentials = null;
         } else {
             credentials = ApiUtils.getCredentials(conversationUser.getUserId(), conversationUser.getToken());
@@ -414,6 +426,10 @@ public class ChatController extends BaseController implements MessagesListAdapte
                             currentCall = callOverall.getOcs().getData();
                             startPing();
                             pullChatMessages(0);
+                            if (startCallFromNotification != null && startCallFromNotification) {
+                                startCallFromNotification = false;
+                                startACall(false);
+                            }
                         }
 
                         @Override
@@ -433,17 +449,15 @@ public class ChatController extends BaseController implements MessagesListAdapte
         }
     }
 
-    private void setSenderId(String guestSenderId) {
-        if (senderId.equals("-1")) {
-            try {
-                final Field senderId = adapter.getClass().getDeclaredField("senderId");
-                senderId.setAccessible(true);
-                senderId.set(adapter, guestSenderId);
-            } catch (NoSuchFieldException e) {
-                Log.e(TAG, "Failed to set sender id");
-            } catch (IllegalAccessException e) {
-                Log.e(TAG, "Failed to access and set field");
-            }
+    private void setSenderId() {
+        try {
+            final Field senderId = adapter.getClass().getDeclaredField("senderId");
+            senderId.setAccessible(true);
+            senderId.set(adapter, conversationUser.getUserId());
+        } catch (NoSuchFieldException e) {
+            Log.e(TAG, "Failed to set sender id");
+        } catch (IllegalAccessException e) {
+            Log.e(TAG, "Failed to access and set field");
         }
     }
 
@@ -465,7 +479,7 @@ public class ChatController extends BaseController implements MessagesListAdapte
 
                     @Override
                     public void onNext(GenericOverall genericOverall) {
-                        if (senderId.equals("-1") && TextUtils.isEmpty(myFirstMessage)) {
+                        if (conversationUser.getUserId().equals("-1") && TextUtils.isEmpty(myFirstMessage)) {
                             myFirstMessage = message;
                         }
 
@@ -478,7 +492,6 @@ public class ChatController extends BaseController implements MessagesListAdapte
 
                     @Override
                     public void onError(Throwable e) {
-
                     }
 
                     @Override
@@ -620,11 +633,12 @@ public class ChatController extends BaseController implements MessagesListAdapte
             } else {
                 for (int i = 0; i < chatMessageList.size(); i++) {
                     chatMessageList.get(i).setBaseUrl(conversationUser.getBaseUrl());
-                    if (senderId.equals("-1") && !TextUtils.isEmpty(myFirstMessage)) {
+                    if (conversationUser.getUserId().equals("-1") && !TextUtils.isEmpty(myFirstMessage)) {
                         ChatMessage chatMessage = chatMessageList.get(i);
                         if (chatMessage.getActorType().equals("guests") &&
                                 chatMessage.getActorDisplayName().equals(conversationUser.getDisplayName())) {
-                            setSenderId(chatMessage.getActorId());
+                            conversationUser.setUserId(chatMessage.getActorId());
+                            setSenderId();
                         }
                     }
                     boolean shouldScroll = layoutManager.findFirstVisibleItemPosition() == 0 ||
@@ -704,16 +718,10 @@ public class ChatController extends BaseController implements MessagesListAdapte
                 return true;
 
             case R.id.conversation_video_call:
-                Intent videoCallIntent = getIntentForCall(false);
-                if (videoCallIntent != null) {
-                    startActivity(videoCallIntent);
-                }
+                startACall(false);
                 return true;
             case R.id.conversation_voice_call:
-                Intent voiceCallIntent = getIntentForCall(true);
-                if (voiceCallIntent != null) {
-                    startActivity(voiceCallIntent);
-                }
+                startACall(true);
                 return true;
 
             default:
@@ -721,11 +729,26 @@ public class ChatController extends BaseController implements MessagesListAdapte
         }
     }
 
+    private void startACall(boolean isVoiceOnlyCall) {
+        if (!isVoiceOnlyCall) {
+            Intent videoCallIntent = getIntentForCall(false);
+            if (videoCallIntent != null) {
+                startActivity(videoCallIntent);
+            }
+        } else {
+            Intent voiceCallIntent = getIntentForCall(true);
+            if (voiceCallIntent != null) {
+                startActivity(voiceCallIntent);
+            }
+        }
+    }
+
     private Intent getIntentForCall(boolean isVoiceOnlyCall) {
         if (currentCall != null && !TextUtils.isEmpty(currentCall.getSessionId())) {
             Bundle bundle = new Bundle();
             bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomToken);
             bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(conversationUser));
+            bundle.putString(BundleKeys.KEY_CONVERSATION_PASSWORD, roomPassword);
             bundle.putString(BundleKeys.KEY_CALL_SESSION, currentCall.getSessionId());
             bundle.putString(BundleKeys.KEY_MODIFIED_BASE_URL, baseUrl);
 

+ 0 - 2
app/src/main/java/com/nextcloud/talk/controllers/ContactsController.java

@@ -296,7 +296,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                             Intent conversationIntent = new Intent(getActivity(), CallActivity.class);
                             Bundle bundle = new Bundle();
                             bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.getOcs().getData().getToken());
-                            bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(currentUser));
 
                             if (currentUser.hasSpreedCapabilityWithName("chat-v2")) {
                                 bundle.putString(BundleKeys.KEY_CONVERSATION_NAME,
@@ -827,7 +826,6 @@ public class ContactsController extends BaseController implements SearchView.OnQ
                                     Intent conversationIntent = new Intent(getActivity(), CallActivity.class);
                                     Bundle bundle = new Bundle();
                                     bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomOverall.getOcs().getData().getToken());
-                                    bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(currentUser));
                                     conversationIntent.putExtras(bundle);
 
                                     if (currentUser.hasSpreedCapabilityWithName("chat-v2")) {

+ 0 - 6
app/src/main/java/com/nextcloud/talk/controllers/bottomsheet/OperationsMenuController.java

@@ -529,12 +529,10 @@ public class OperationsMenuController extends BaseController {
     private void initiateConversation(boolean dismissView, @Nullable List<String> spreedCapabilities) {
         Bundle bundle = new Bundle();
         boolean hasChatCapability;
-        boolean isGuest = false;
 
         if (baseUrl != null && !baseUrl.equals(currentUser.getBaseUrl())) {
             bundle.putString(BundleKeys.KEY_MODIFIED_BASE_URL, baseUrl);
             hasChatCapability = spreedCapabilities != null && spreedCapabilities.contains("chat-v2");
-            isGuest = true;
         } else {
             hasChatCapability = currentUser.hasSpreedCapabilityWithName("chat-v2");
         }
@@ -547,10 +545,6 @@ public class OperationsMenuController extends BaseController {
             Intent conversationIntent = new Intent(getActivity(), CallActivity.class);
             bundle.putString(BundleKeys.KEY_ROOM_TOKEN, room.getToken());
             bundle.putString(BundleKeys.KEY_CONVERSATION_NAME, room.getDisplayName());
-            if (!isGuest) {
-                bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(currentUser));
-            }
-
             bundle.putParcelable(BundleKeys.KEY_ACTIVE_CONVERSATION, Parcels.wrap(call));
 
             conversationIntent.putExtras(bundle);

+ 1 - 0
app/src/main/java/com/nextcloud/talk/jobs/CapabilitiesJob.java

@@ -92,6 +92,7 @@ public class CapabilitiesJob extends Job {
 
             ncApi.getCapabilities(ApiUtils.getCredentials(internalUserEntity.getUsername(),
                     internalUserEntity.getToken()), ApiUtils.getUrlForCapabilities(internalUserEntity.getBaseUrl()))
+                    .retry(3)
                     .subscribeOn(Schedulers.newThread())
                     .subscribe(new Observer<CapabilitiesOverall>() {
                         @Override

+ 29 - 2
app/src/main/java/com/nextcloud/talk/jobs/NotificationJob.java

@@ -41,6 +41,7 @@ import com.evernote.android.job.Job;
 import com.evernote.android.job.util.support.PersistableBundleCompat;
 import com.nextcloud.talk.R;
 import com.nextcloud.talk.activities.CallActivity;
+import com.nextcloud.talk.activities.MainActivity;
 import com.nextcloud.talk.application.NextcloudTalkApplication;
 import com.nextcloud.talk.models.SignatureVerification;
 import com.nextcloud.talk.models.json.push.DecryptedPushMessage;
@@ -98,13 +99,36 @@ public class NotificationJob extends Job {
                             String category = "";
                             int priority = Notification.PRIORITY_DEFAULT;
                             Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
+                            Intent intent;
 
-                            Intent intent = new Intent(context, CallActivity.class);
                             Bundle bundle = new Bundle();
+
+                            boolean hasChatSupport = signatureVerification.getUserEntity().hasSpreedCapabilityWithName
+                                    ("chat-v2");
+
+                            if (hasChatSupport) {
+                                intent = new Intent(context, MainActivity.class);
+                                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+                            } else {
+                                intent = new Intent(context, CallActivity.class);
+                                bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, true);
+                            }
+
                             bundle.putString(BundleKeys.KEY_ROOM_TOKEN, decryptedPushMessage.getId());
                             bundle.putParcelable(BundleKeys.KEY_USER_ENTITY, Parcels.wrap(signatureVerification
                                     .getUserEntity()));
-                            bundle.putBoolean("fromNotification", true);
+
+
+                            if (hasChatSupport) {
+                                if (decryptedPushMessage.getType().equals("call")) {
+                                    bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, true);
+                                } else {
+                                    bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false);
+                                }
+                            }  else {
+                                bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, true);
+                            }
+
                             intent.putExtras(bundle);
 
                             PendingIntent pendingIntent = PendingIntent.getActivity(context,
@@ -126,6 +150,9 @@ public class NotificationJob extends Job {
                                     priority = Notification.PRIORITY_HIGH;
                                     break;
                                 case "chat":
+                                    if (hasChatSupport) {
+                                        bundle.putBoolean(BundleKeys.KEY_FROM_NOTIFICATION_START_CALL, false);
+                                    }
                                     smallIcon = R.drawable.ic_chat_black_24dp;
                                     category = Notification.CATEGORY_MESSAGE;
                                     break;

+ 1 - 0
app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.java

@@ -48,4 +48,5 @@ public class BundleKeys {
     public static final String KEY_CALL_VOICE_ONLY = "KEY_CALL_VOICE_ONLY";
     public static final String KEY_ACTIVE_CONVERSATION = "KEY_ACTIVE_CONVERSATION";
     public static final String KEY_SPREED_CAPABILITIES = "KEY_SPREED_CAPABILITIES";
+    public static final String KEY_FROM_NOTIFICATION_START_CALL = "KEY_FROM_NOTIFICATION_START_CALL";
 }