diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index cee0b54a6765f3526a1a48d482280d44b0f39915..9d704778beece56ef22cf07c62ae14a77eada32b 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -140,6 +140,7 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke public static final int REQUEST_ADD_EDITOR_CONTENT = 0x0211; public static final int REQUEST_COMMIT_ATTACHMENTS = 0x0212; public static final int REQUEST_START_AUDIO_CALL = 0x213; + public static final int REQUEST_START_VIDEO_CALL = 0x214; public static final int ATTACHMENT_CHOICE_CHOOSE_IMAGE = 0x0301; public static final int ATTACHMENT_CHOICE_TAKE_PHOTO = 0x0302; public static final int ATTACHMENT_CHOICE_CHOOSE_FILE = 0x0303; @@ -1234,8 +1235,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke BlockContactDialog.show((XmppActivity) activity, conversation); } break; - case R.id.action_call: - checkPermissionAndTriggerRtpSession(); + case R.id.action_audio_call: + checkPermissionAndTriggerAudioCall(); + break; + case R.id.action_video_call: + checkPermissionAndTriggerVideoCall(); break; default: break; @@ -1243,21 +1247,31 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke return super.onOptionsItemSelected(item); } - private void checkPermissionAndTriggerRtpSession() { + private void checkPermissionAndTriggerAudioCall() { if (activity.xmppConnectionService.useTorToConnect() || conversation.getAccount().isOnion()) { Toast.makeText(activity, R.string.disable_tor_to_make_call, Toast.LENGTH_SHORT).show(); return; } if (hasPermissions(REQUEST_START_AUDIO_CALL, Manifest.permission.RECORD_AUDIO)) { - triggerRtpSession(); + triggerRtpSession(RtpSessionActivity.ACTION_MAKE_VOICE_CALL); } } + private void checkPermissionAndTriggerVideoCall() { + if (activity.xmppConnectionService.useTorToConnect() || conversation.getAccount().isOnion()) { + Toast.makeText(activity, R.string.disable_tor_to_make_call, Toast.LENGTH_SHORT).show(); + return; + } + if (hasPermissions(REQUEST_START_VIDEO_CALL, Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA)) { + triggerRtpSession(RtpSessionActivity.ACTION_MAKE_VIDEO_CALL); + } + } - private void triggerRtpSession() { + + private void triggerRtpSession(final String action) { final Contact contact = conversation.getContact(); final Intent intent = new Intent(activity, RtpSessionActivity.class); - intent.setAction(RtpSessionActivity.ACTION_MAKE_VOICE_CALL); + intent.setAction(action); intent.putExtra(RtpSessionActivity.EXTRA_ACCOUNT, contact.getAccount().getJid().toEscapedString()); intent.putExtra(RtpSessionActivity.EXTRA_WITH, contact.getJid().asBareJid().toEscapedString()); startActivity(intent); @@ -1414,7 +1428,10 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke commitAttachments(); break; case REQUEST_START_AUDIO_CALL: - triggerRtpSession(); + triggerRtpSession(RtpSessionActivity.ACTION_MAKE_VOICE_CALL); + break; + case REQUEST_START_VIDEO_CALL: + triggerRtpSession(RtpSessionActivity.ACTION_MAKE_VIDEO_CALL); break; default: attachFile(requestCode); diff --git a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java index 2d335ec7552f52a65a2aeedebf0c43dd8537a164..22692f86bcfba3bb77e6fd3568a0d338e4db848d 100644 --- a/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java @@ -190,6 +190,7 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe @Override void onBackendConnected() { final Intent intent = getIntent(); + final String action = intent.getAction(); final Account account = extractAccount(intent); final Jid with = Jid.of(intent.getStringExtra(EXTRA_WITH)); final String sessionId = intent.getStringExtra(EXTRA_SESSION_ID); @@ -200,10 +201,16 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe requestPermissionsAndAcceptCall(); resetIntent(intent.getExtras()); } - } else if (asList(ACTION_MAKE_VIDEO_CALL, ACTION_MAKE_VOICE_CALL).contains(intent.getAction())) { - proposeJingleRtpSession(account, with, ImmutableSet.of(Media.AUDIO, Media.VIDEO)); + } else if (asList(ACTION_MAKE_VIDEO_CALL, ACTION_MAKE_VOICE_CALL).contains(action)) { + final Set media; + if (ACTION_MAKE_VIDEO_CALL.equals(action)) { + media = ImmutableSet.of(Media.AUDIO, Media.VIDEO); + } else { + media = ImmutableSet.of(Media.AUDIO); + } + proposeJingleRtpSession(account, with, media); binding.with.setText(account.getRoster().getContact(with).getDisplayName()); - } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { + } else if (Intent.ACTION_VIEW.equals(action)) { final String extraLastState = intent.getStringExtra(EXTRA_LAST_REPORTED_STATE); if (extraLastState != null) { Log.d(Config.LOGTAG, "restored last state from intent extra"); diff --git a/src/main/res/drawable-hdpi/ic_call_black_24dp.png b/src/main/res/drawable-hdpi/ic_call_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d4077acf91bca566c143501ecd3589960f297eef Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_call_black_24dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_videocam_black_24dp.png b/src/main/res/drawable-hdpi/ic_videocam_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0a1e9b08ac01f46cbe0360bdb4df44b4ef2d114b Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_videocam_black_24dp.png differ diff --git a/src/main/res/drawable-hdpi/ic_videocam_white_24dp.png b/src/main/res/drawable-hdpi/ic_videocam_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d83e0d50c3dd1aa384568f658f815b35819462a0 Binary files /dev/null and b/src/main/res/drawable-hdpi/ic_videocam_white_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_call_black_24dp.png b/src/main/res/drawable-mdpi/ic_call_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..55ed026bcec5bba38bcf91972fd08d4671dc9b84 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_call_black_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_videocam_black_24dp.png b/src/main/res/drawable-mdpi/ic_videocam_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0722a69290367ad1e31ad9a158b9eef749de7980 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_videocam_black_24dp.png differ diff --git a/src/main/res/drawable-mdpi/ic_videocam_white_24dp.png b/src/main/res/drawable-mdpi/ic_videocam_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d146209a5145962cfa3226918807fb663d2c7267 Binary files /dev/null and b/src/main/res/drawable-mdpi/ic_videocam_white_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_call_black_24dp.png b/src/main/res/drawable-xhdpi/ic_call_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..99f28bbeca97715d85975921dd64fbde691c7ed9 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_call_black_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_videocam_black_24dp.png b/src/main/res/drawable-xhdpi/ic_videocam_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a3b44d154ae04a54b04ceac0d7322a08f8bf68 Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_videocam_black_24dp.png differ diff --git a/src/main/res/drawable-xhdpi/ic_videocam_white_24dp.png b/src/main/res/drawable-xhdpi/ic_videocam_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1b2583d34e8bafff26a20f89c9d7cacf4525617e Binary files /dev/null and b/src/main/res/drawable-xhdpi/ic_videocam_white_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_call_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_call_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9d1b09c55f77d44877d4a354280ae5c2e1f645 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_call_black_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_videocam_black_24dp.png b/src/main/res/drawable-xxhdpi/ic_videocam_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..0039e804eb1684ea4ebc31799709a087f572e5f5 Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_videocam_black_24dp.png differ diff --git a/src/main/res/drawable-xxhdpi/ic_videocam_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_videocam_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..44c28e2f2830f927973beaa3a143ddfe439f20ed Binary files /dev/null and b/src/main/res/drawable-xxhdpi/ic_videocam_white_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_call_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_call_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..61b0e704335595dcebf97b6793bd37c6ed96d552 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_call_black_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_videocam_black_24dp.png b/src/main/res/drawable-xxxhdpi/ic_videocam_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..be3ba821a49f63bf6e78284bdc8abce83bf5faeb Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_videocam_black_24dp.png differ diff --git a/src/main/res/drawable-xxxhdpi/ic_videocam_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_videocam_white_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..ed20c0706292403018b019329a4608db85d99e06 Binary files /dev/null and b/src/main/res/drawable-xxxhdpi/ic_videocam_white_24dp.png differ diff --git a/src/main/res/drawable/ic_call_black54_24dp.xml b/src/main/res/drawable/ic_call_black54_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..beb641078f23c758ff0cb5f0a2845b7c69e57297 --- /dev/null +++ b/src/main/res/drawable/ic_call_black54_24dp.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/src/main/res/drawable/ic_call_white70_24dp.xml b/src/main/res/drawable/ic_call_white70_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1a2e46a17ee5097a4f42ca321d2a4bc4d57d3fc --- /dev/null +++ b/src/main/res/drawable/ic_call_white70_24dp.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/src/main/res/drawable/ic_videocam_black54_24dp.xml b/src/main/res/drawable/ic_videocam_black54_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..5fe6bfea7d104159b9d797fb85a0bbf96b7b4e5a --- /dev/null +++ b/src/main/res/drawable/ic_videocam_black54_24dp.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/src/main/res/drawable/ic_videocam_white70_24dp.xml b/src/main/res/drawable/ic_videocam_white70_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..83e61f012f360151b9490c5f52f3f62ee20a8f0c --- /dev/null +++ b/src/main/res/drawable/ic_videocam_white70_24dp.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/src/main/res/menu/fragment_conversation.xml b/src/main/res/menu/fragment_conversation.xml index c5a5742793901b591ca284a491ff342cedc63a98..b01e8cfa566310d5f5311aa05e5093ed3d168827 100644 --- a/src/main/res/menu/fragment_conversation.xml +++ b/src/main/res/menu/fragment_conversation.xml @@ -65,7 +65,18 @@ android:icon="?attr/icon_call" android:orderInCategory="35" android:title="@string/make_call" - app:showAsAction="always" /> + app:showAsAction="always"> + + + + + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 6aacd36731c7f66375196d2376548c6c1c0650e9..854dfa3c6739889f3e2fc38ffa2fe42a6bdaf1a1 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -908,6 +908,8 @@ Outgoing call Outgoing call ยท %s Missed call + Audio call + Video call View %1$d Participant View %1$d Participants diff --git a/src/main/res/values/themes.xml b/src/main/res/values/themes.xml index e07c3bf67cdff16e41ef7a9a18085df340c0e550..2f8ecc434e02c36bf219d1628967fec0be3d1e2d 100644 --- a/src/main/res/values/themes.xml +++ b/src/main/res/values/themes.xml @@ -54,6 +54,9 @@ @drawable/ic_attach_photo @drawable/ic_attach_record + @drawable/ic_call_black54_24dp + @drawable/ic_videocam_black54_24dp + @drawable/message_bubble_received_white @drawable/message_bubble_sent @drawable/message_bubble_received @@ -164,6 +167,9 @@ @drawable/ic_send_videocam_offline_white @drawable/ic_send_voice_offline_white + @drawable/ic_call_white70_24dp + @drawable/ic_videocam_white70_24dp + @drawable/ic_attach_camera_white @drawable/ic_attach_videocam_white @drawable/ic_attach_document_white