From 688a103c10501ba22d98fc4e9d907bb97d42e861 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Feb 2026 16:45:29 +0100 Subject: [PATCH 01/11] hide delete-contact icon in ContactSelectionListFragment --- .../org/thoughtcrime/securesms/ContactSelectionListFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index bf4cf95ca..ff45edbae 100644 --- a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -129,6 +129,7 @@ public class ContactSelectionListFragment extends Fragment public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.contact_list, menu); + menu.findItem(R.id.menu_delete_selected).setVisible(!isMulti()); updateActionModeState(actionMode); return true; } From 134145d1667e34da1888f2dbfb47760b1962f79a Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Feb 2026 17:13:48 +0100 Subject: [PATCH 02/11] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49355a928..7196ced7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ * Fix mailto handling * Fix layout problems inside in-chat apps * Avoid crash when the app is minimized with profile switcher or reactions dialogs open +* Remove "trash icon" option from contact selection list when adding members to group * Update to core 2.39.0 ## v2.35.0 From df7d80319ca1eee563bcf5e2ad57218889d09c71 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Feb 2026 19:36:34 +0100 Subject: [PATCH 03/11] show menu to select audio/video call modes --- .../securesms/ConversationActivity.java | 7 +++++-- .../thoughtcrime/securesms/calls/CallUtil.java | 6 +++--- src/main/res/menu/conversation.xml | 17 ++++++++++++++--- src/main/res/values/strings.xml | 2 ++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index b11340984..d481dd062 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -566,8 +566,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } else if (itemId == R.id.menu_show_map) { WebxdcActivity.openMaps(this, chatId); return true; - } else if (itemId == R.id.menu_start_call) { - CallUtil.startCall(this, chatId); + } else if (itemId == R.id.menu_start_audio_call) { + CallUtil.startCall(this, chatId, true); + return true; + } else if (itemId == R.id.menu_start_video_call) { + CallUtil.startCall(this, chatId, false); return true; } else if (itemId == R.id.menu_all_media) { handleAllMedia(); diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java index f84e2385b..b1494f786 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java @@ -18,19 +18,19 @@ import java.nio.charset.StandardCharsets; public class CallUtil { private static final String TAG = CallUtil.class.getSimpleName(); - public static void startCall(Activity activity, int chatId) { + public static void startCall(Activity activity, int chatId, boolean audioOnly) { Permissions.with(activity) .request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO) .ifNecessary() .withPermanentDenialDialog(activity.getString(R.string.perm_explain_access_to_camera_denied)) .onAllGranted(() -> { int accId = DcHelper.getContext(activity).getAccountId(); - startCall(activity, accId, chatId); + startCall(activity, accId, chatId, audioOnly); }) .execute(); } - public static void startCall(Context context, int accId, int chatId) { + public static void startCall(Context context, int accId, int chatId, boolean audioOnly) { Intent intent = new Intent(context, CallActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); diff --git a/src/main/res/menu/conversation.xml b/src/main/res/menu/conversation.xml index cbe09e6f7..678d48f3d 100644 --- a/src/main/res/menu/conversation.xml +++ b/src/main/res/menu/conversation.xml @@ -26,9 +26,20 @@ app:showAsAction="always"/> + android:title="@string/start_call" + app:showAsAction="always" + android:icon="@drawable/baseline_call_24"> + + + + + Call + Audio Call + Video Call Answer From 41d94ae3ee2f715750b2fe5d6dad945f4ba8c0da Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Feb 2026 22:14:50 +0100 Subject: [PATCH 04/11] if it is an audio-only call start with video disabled --- src/main/java/org/thoughtcrime/securesms/ConversationItem.java | 2 +- src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index d388cc226..bdd12795a 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -998,7 +998,7 @@ public class ConversationItem extends BaseConversationItem int callId = messageRecord.getId(); CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer); } else { - CallUtil.startCall(getContext(), accId, chatId); + CallUtil.startCall(getContext(), accId, chatId, false); // TODO: core api needed to get if call message is audio-only } } } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java index b1494f786..f4db9d2db 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java @@ -35,7 +35,8 @@ public class CallUtil { intent.setAction(Intent.ACTION_VIEW); intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatId); - intent.putExtra(CallActivity.EXTRA_HASH, "#startCall"); + String query = audioOnly? "?noOutgoingVideoInitially" : ""; + intent.putExtra(CallActivity.EXTRA_HASH, query + "#startCall"); context.startActivity(intent); } From dd0e847976a8905bc1ab6f30a6d8556b3fd4d89a Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 4 Feb 2026 23:17:42 +0100 Subject: [PATCH 05/11] take into consideration if the call is audio/video call when accepting it --- .../thoughtcrime/securesms/ConversationItem.java | 2 +- .../securesms/calls/CallActivity.java | 6 +++++- .../thoughtcrime/securesms/calls/CallUtil.java | 4 ++-- .../notifications/NotificationCenter.java | 16 +++++++++++++--- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index bdd12795a..821ade706 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -998,7 +998,7 @@ public class ConversationItem extends BaseConversationItem int callId = messageRecord.getId(); CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer); } else { - CallUtil.startCall(getContext(), accId, chatId, false); // TODO: core api needed to get if call message is audio-only + CallUtil.startCall(getContext(), accId, chatId, !callInfo.hasVideo); } } } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java index d20eb88a7..158f8609e 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java @@ -43,12 +43,14 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve public static final String EXTRA_CHAT_ID = "chat_id"; public static final String EXTRA_CALL_ID = "call_id"; public static final String EXTRA_HASH = "hash"; + public static final String EXTRA_AUDIO_ONLY = "audio_only"; private DcContext dcContext; private Rpc rpc; private int accId; private int chatId; private int callId; + private boolean audioOnly; private boolean ended = false; @SuppressLint("SetJavaScriptEnabled") @@ -58,7 +60,9 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve Bundle bundle = getIntent().getExtras(); assert bundle != null; + audioOnly = bundle.getBoolean(EXTRA_AUDIO_ONLY, false); String hash = bundle.getString(EXTRA_HASH, ""); + String query = audioOnly? "?noOutgoingVideoInitially" : ""; accId = bundle.getInt(EXTRA_ACCOUNT_ID, -1); chatId = bundle.getInt(EXTRA_CHAT_ID, 0); callId = bundle.getInt(EXTRA_CALL_ID, 0); @@ -94,7 +98,7 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve .withPermanentDenialDialog(getString(R.string.perm_explain_access_to_camera_denied)) .onAllGranted(() -> { String url = "file:///android_asset/calls/index.html"; - webView.loadUrl(url + hash); + webView.loadUrl(url + query + hash); }).onAnyDenied(this::finish) .execute(); } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java index f4db9d2db..0e2b79875 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java @@ -35,8 +35,8 @@ public class CallUtil { intent.setAction(Intent.ACTION_VIEW); intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatId); - String query = audioOnly? "?noOutgoingVideoInitially" : ""; - intent.putExtra(CallActivity.EXTRA_HASH, query + "#startCall"); + intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); + intent.putExtra(CallActivity.EXTRA_HASH, "#startCall"); context.startActivity(intent); } diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index 7bdd7b18d..dbbdceeac 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -61,6 +61,8 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; +import chat.delta.rpc.RpcException; + public class NotificationCenter { private static final String TAG = NotificationCenter.class.getSimpleName(); @NonNull private final ApplicationContext context; @@ -164,7 +166,7 @@ public class NotificationCenter { return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | IntentUtils.FLAG_MUTABLE()); } - public PendingIntent getOpenCallIntent(ChatData chatData, int callId, String payload, boolean autoAccept) { + public PendingIntent getOpenCallIntent(ChatData chatData, int callId, String payload, boolean autoAccept, boolean audioOnly) { final Intent chatIntent = new Intent(context, ConversationActivity.class) .putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, chatData.accountId) .putExtra(ConversationActivity.CHAT_ID_EXTRA, chatData.chatId) @@ -184,6 +186,7 @@ public class NotificationCenter { intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatData.chatId); intent.putExtra(CallActivity.EXTRA_CALL_ID, callId); intent.putExtra(CallActivity.EXTRA_HASH, hash); + intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); intent.setPackage(context.getPackageName()); return TaskStackBuilder.create(context) .addNextIntentWithParentStack(chatIntent) @@ -427,6 +430,13 @@ public class NotificationCenter { Util.runOnAnyBackgroundThread(() -> { NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); DcContext dcContext = context.getDcAccounts().getAccount(accId); + boolean audioOnly; + try { + audioOnly = !context.getRpc().callInfo(accId, callId).hasVideo; + } catch (RpcException e) { + Log.e(TAG, "Rpc.callInfo() failed", e); + audioOnly = true; + } int chatId = dcContext.getMsg(callId).getChatId(); DcChat dcChat = dcContext.getChat(chatId); String name = dcChat.getName(); @@ -434,7 +444,7 @@ public class NotificationCenter { String notificationChannel = getCallNotificationChannel(notificationManager, chatData, name); PendingIntent declineCallIntent = getDeclineCallIntent(chatData, callId); - PendingIntent openCallIntent = getOpenCallIntent(chatData, callId, payload, false); + PendingIntent openCallIntent = getOpenCallIntent(chatData, callId, payload, false, audioOnly); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, notificationChannel) .setSmallIcon(R.drawable.icon_notification) @@ -459,7 +469,7 @@ public class NotificationCenter { new NotificationCompat.Action.Builder( R.drawable.baseline_call_24, context.getString(R.string.answer_call), - getOpenCallIntent(chatData, callId, payload, true)).build()); + getOpenCallIntent(chatData, callId, payload, true, audioOnly)).build()); Bitmap bitmap = getAvatar(dcChat); if (bitmap != null) { From 3ac49e3e5896916ff9ed20736ccccc3a17f9b246 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 01:20:11 +0100 Subject: [PATCH 06/11] set the call mode when calling Rpc.placeOutgoingCall --- .../java/org/thoughtcrime/securesms/calls/CallActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java index 713b6c001..58e2caa29 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java @@ -172,7 +172,7 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve @JavascriptInterface public void startCall(String payload) { try { - callId = rpc.placeOutgoingCall(accId, chatId, payload, true); + callId = rpc.placeOutgoingCall(accId, chatId, payload, !audioOnly); } catch (RpcException e) { Log.e(TAG, "Error", e); } From f470e92300da350770863a418767147503235d66 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 01:35:20 +0100 Subject: [PATCH 07/11] show different icon depending on voice/video call modes --- src/main/java/org/thoughtcrime/securesms/ConversationItem.java | 2 +- src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java | 3 ++- .../org/thoughtcrime/securesms/components/CallItemView.java | 2 ++ src/main/res/layout/call_item_view.xml | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index 821ade706..ccdcdacf4 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -996,7 +996,7 @@ public class ConversationItem extends BaseConversationItem int chatId = messageRecord.getChatId(); if (!messageRecord.isOutgoing() && callInfo.state instanceof CallState.Alerting) { int callId = messageRecord.getId(); - CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer); + CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer, !callInfo.hasVideo); } else { CallUtil.startCall(getContext(), accId, chatId, !callInfo.hasVideo); } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java index 0e2b79875..c78ef385e 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java @@ -40,7 +40,7 @@ public class CallUtil { context.startActivity(intent); } - public static void openCall(Context context, int accId, int chatId, int callId, String payload) { + public static void openCall(Context context, int accId, int chatId, int callId, String payload, boolean audioOnly) { String base64 = Base64.encodeToString(payload.getBytes(StandardCharsets.UTF_8), Base64.NO_WRAP); String hash = ""; try { @@ -54,6 +54,7 @@ public class CallUtil { intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatId); intent.putExtra(CallActivity.EXTRA_CALL_ID, callId); + intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); intent.putExtra(CallActivity.EXTRA_HASH, hash); context.startActivity(intent); } diff --git a/src/main/java/org/thoughtcrime/securesms/components/CallItemView.java b/src/main/java/org/thoughtcrime/securesms/components/CallItemView.java index a66f54790..1cc06bec5 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/CallItemView.java +++ b/src/main/java/org/thoughtcrime/securesms/components/CallItemView.java @@ -71,6 +71,8 @@ public class CallItemView extends FrameLayout { title.setText(isOutgoing? R.string.outgoing_call : R.string.incoming_call); } + icon.setImageResource(callInfo.hasVideo? R.drawable.ic_videocam_white_24dp : R.drawable.baseline_call_24); + int[] attrs; if (isOutgoing) { attrs = new int[]{ diff --git a/src/main/res/layout/call_item_view.xml b/src/main/res/layout/call_item_view.xml index 66064b7e4..32aea6633 100644 --- a/src/main/res/layout/call_item_view.xml +++ b/src/main/res/layout/call_item_view.xml @@ -44,7 +44,6 @@ android:layout_width="30dp" android:layout_height="30dp" android:contentDescription="@null" - android:src="@drawable/baseline_call_24" /> From 8999f54ba27cf0a14cd2c0f749595c33169a94a5 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 01:40:27 +0100 Subject: [PATCH 08/11] upgrade calls web app --- src/main/assets/calls/index.html | 64 +++----------------------------- 1 file changed, 5 insertions(+), 59 deletions(-) diff --git a/src/main/assets/calls/index.html b/src/main/assets/calls/index.html index 96fbfcbd8..6b01902e9 100644 --- a/src/main/assets/calls/index.html +++ b/src/main/assets/calls/index.html @@ -1,6 +1,6 @@ - + - - - - + +
From fc69212a51252658b0c523dd5ff1013de1af11b8 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 01:41:29 +0100 Subject: [PATCH 09/11] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67033b4a2..bd61bf594 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Mark external links with " ↗" to make them clear * Make QR code larger on "Add Second Device" screen * Add indication for blocked contacts in user profile +* Allow to start calls with video disabled * Show hint for empty contact search results * Fix: Show dialog if pasted QR codes are invalid * Fix: Refresh chat list when returning from conversation if selected profile changed From 3847e20d187e0665915e4424f0a7833acdd98b8e Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 02:31:38 +0100 Subject: [PATCH 10/11] set tint for icons in the call submenu --- src/main/res/menu/conversation.xml | 2 ++ src/main/res/values/attrs.xml | 1 + src/main/res/values/themes.xml | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/main/res/menu/conversation.xml b/src/main/res/menu/conversation.xml index 678d48f3d..879e60b2e 100644 --- a/src/main/res/menu/conversation.xml +++ b/src/main/res/menu/conversation.xml @@ -33,10 +33,12 @@ diff --git a/src/main/res/values/attrs.xml b/src/main/res/values/attrs.xml index 706be4654..dcc89a380 100644 --- a/src/main/res/values/attrs.xml +++ b/src/main/res/values/attrs.xml @@ -79,6 +79,7 @@ + diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index d12710d85..2b049601a 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -133,6 +133,7 @@ @drawable/ic_reply_white_24dp @color/delta_primary + @color/black @color/grey_700 @color/grey_100 @@ -243,6 +244,7 @@ @drawable/ic_reply_white_24dp @color/core_white + @color/white @color/grey_100 ?icon_tint From 006f8ae826aabacec04fd161e04ba7247badc3b6 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 5 Feb 2026 16:37:42 +0100 Subject: [PATCH 11/11] use hasVideo instead of audioOnly --- .../securesms/ConversationActivity.java | 4 ++-- .../thoughtcrime/securesms/ConversationItem.java | 4 ++-- .../thoughtcrime/securesms/calls/CallActivity.java | 10 +++++----- .../org/thoughtcrime/securesms/calls/CallUtil.java | 12 ++++++------ .../notifications/NotificationCenter.java | 14 +++++++------- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index d481dd062..0bf5acc9a 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -567,10 +567,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity WebxdcActivity.openMaps(this, chatId); return true; } else if (itemId == R.id.menu_start_audio_call) { - CallUtil.startCall(this, chatId, true); + CallUtil.startCall(this, chatId, false); return true; } else if (itemId == R.id.menu_start_video_call) { - CallUtil.startCall(this, chatId, false); + CallUtil.startCall(this, chatId, true); return true; } else if (itemId == R.id.menu_all_media) { handleAllMedia(); diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java index ccdcdacf4..bd0c7dc14 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -996,9 +996,9 @@ public class ConversationItem extends BaseConversationItem int chatId = messageRecord.getChatId(); if (!messageRecord.isOutgoing() && callInfo.state instanceof CallState.Alerting) { int callId = messageRecord.getId(); - CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer, !callInfo.hasVideo); + CallUtil.openCall(getContext(), accId, chatId, callId, callInfo.sdpOffer, callInfo.hasVideo); } else { - CallUtil.startCall(getContext(), accId, chatId, !callInfo.hasVideo); + CallUtil.startCall(getContext(), accId, chatId, callInfo.hasVideo); } } } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java index 58e2caa29..b7da6e461 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallActivity.java @@ -43,14 +43,14 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve public static final String EXTRA_CHAT_ID = "chat_id"; public static final String EXTRA_CALL_ID = "call_id"; public static final String EXTRA_HASH = "hash"; - public static final String EXTRA_AUDIO_ONLY = "audio_only"; + public static final String EXTRA_HAS_VIDEO = "has_video"; private DcContext dcContext; private Rpc rpc; private int accId; private int chatId; private int callId; - private boolean audioOnly; + private boolean hasVideo; private boolean ended = false; @SuppressLint("SetJavaScriptEnabled") @@ -60,9 +60,9 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve Bundle bundle = getIntent().getExtras(); assert bundle != null; - audioOnly = bundle.getBoolean(EXTRA_AUDIO_ONLY, false); + hasVideo = bundle.getBoolean(EXTRA_HAS_VIDEO, true); String hash = bundle.getString(EXTRA_HASH, ""); - String query = audioOnly? "?noOutgoingVideoInitially" : ""; + String query = hasVideo? "" : "?noOutgoingVideoInitially"; accId = bundle.getInt(EXTRA_ACCOUNT_ID, -1); chatId = bundle.getInt(EXTRA_CHAT_ID, 0); callId = bundle.getInt(EXTRA_CALL_ID, 0); @@ -172,7 +172,7 @@ public class CallActivity extends WebViewActivity implements DcEventCenter.DcEve @JavascriptInterface public void startCall(String payload) { try { - callId = rpc.placeOutgoingCall(accId, chatId, payload, !audioOnly); + callId = rpc.placeOutgoingCall(accId, chatId, payload, hasVideo); } catch (RpcException e) { Log.e(TAG, "Error", e); } diff --git a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java index c78ef385e..3ef0e237f 100644 --- a/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/calls/CallUtil.java @@ -18,29 +18,29 @@ import java.nio.charset.StandardCharsets; public class CallUtil { private static final String TAG = CallUtil.class.getSimpleName(); - public static void startCall(Activity activity, int chatId, boolean audioOnly) { + public static void startCall(Activity activity, int chatId, boolean hasVideo) { Permissions.with(activity) .request(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO) .ifNecessary() .withPermanentDenialDialog(activity.getString(R.string.perm_explain_access_to_camera_denied)) .onAllGranted(() -> { int accId = DcHelper.getContext(activity).getAccountId(); - startCall(activity, accId, chatId, audioOnly); + startCall(activity, accId, chatId, hasVideo); }) .execute(); } - public static void startCall(Context context, int accId, int chatId, boolean audioOnly) { + public static void startCall(Context context, int accId, int chatId, boolean hasVideo) { Intent intent = new Intent(context, CallActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatId); - intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); + intent.putExtra(CallActivity.EXTRA_HAS_VIDEO, hasVideo); intent.putExtra(CallActivity.EXTRA_HASH, "#startCall"); context.startActivity(intent); } - public static void openCall(Context context, int accId, int chatId, int callId, String payload, boolean audioOnly) { + public static void openCall(Context context, int accId, int chatId, int callId, String payload, boolean hasVideo) { String base64 = Base64.encodeToString(payload.getBytes(StandardCharsets.UTF_8), Base64.NO_WRAP); String hash = ""; try { @@ -54,7 +54,7 @@ public class CallUtil { intent.putExtra(CallActivity.EXTRA_ACCOUNT_ID, accId); intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatId); intent.putExtra(CallActivity.EXTRA_CALL_ID, callId); - intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); + intent.putExtra(CallActivity.EXTRA_HAS_VIDEO, hasVideo); intent.putExtra(CallActivity.EXTRA_HASH, hash); context.startActivity(intent); } diff --git a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java index dbbdceeac..323862231 100644 --- a/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java @@ -166,7 +166,7 @@ public class NotificationCenter { return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | IntentUtils.FLAG_MUTABLE()); } - public PendingIntent getOpenCallIntent(ChatData chatData, int callId, String payload, boolean autoAccept, boolean audioOnly) { + public PendingIntent getOpenCallIntent(ChatData chatData, int callId, String payload, boolean autoAccept, boolean hasVideo) { final Intent chatIntent = new Intent(context, ConversationActivity.class) .putExtra(ConversationActivity.ACCOUNT_ID_EXTRA, chatData.accountId) .putExtra(ConversationActivity.CHAT_ID_EXTRA, chatData.chatId) @@ -186,7 +186,7 @@ public class NotificationCenter { intent.putExtra(CallActivity.EXTRA_CHAT_ID, chatData.chatId); intent.putExtra(CallActivity.EXTRA_CALL_ID, callId); intent.putExtra(CallActivity.EXTRA_HASH, hash); - intent.putExtra(CallActivity.EXTRA_AUDIO_ONLY, audioOnly); + intent.putExtra(CallActivity.EXTRA_HAS_VIDEO, hasVideo); intent.setPackage(context.getPackageName()); return TaskStackBuilder.create(context) .addNextIntentWithParentStack(chatIntent) @@ -430,12 +430,12 @@ public class NotificationCenter { Util.runOnAnyBackgroundThread(() -> { NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); DcContext dcContext = context.getDcAccounts().getAccount(accId); - boolean audioOnly; + boolean hasVideo; try { - audioOnly = !context.getRpc().callInfo(accId, callId).hasVideo; + hasVideo = context.getRpc().callInfo(accId, callId).hasVideo; } catch (RpcException e) { Log.e(TAG, "Rpc.callInfo() failed", e); - audioOnly = true; + hasVideo = false; } int chatId = dcContext.getMsg(callId).getChatId(); DcChat dcChat = dcContext.getChat(chatId); @@ -444,7 +444,7 @@ public class NotificationCenter { String notificationChannel = getCallNotificationChannel(notificationManager, chatData, name); PendingIntent declineCallIntent = getDeclineCallIntent(chatData, callId); - PendingIntent openCallIntent = getOpenCallIntent(chatData, callId, payload, false, audioOnly); + PendingIntent openCallIntent = getOpenCallIntent(chatData, callId, payload, false, hasVideo); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, notificationChannel) .setSmallIcon(R.drawable.icon_notification) @@ -469,7 +469,7 @@ public class NotificationCenter { new NotificationCompat.Action.Builder( R.drawable.baseline_call_24, context.getString(R.string.answer_call), - getOpenCallIntent(chatData, callId, payload, true, audioOnly)).build()); + getOpenCallIntent(chatData, callId, payload, true, hasVideo)).build()); Bitmap bitmap = getAvatar(dcChat); if (bitmap != null) {