diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index cee0b54a6..9d704778b 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 2d335ec75..22692f86b 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 000000000..d4077acf9 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 000000000..0a1e9b08a 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 000000000..d83e0d50c 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 000000000..55ed026bc 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 000000000..0722a6929 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 000000000..d146209a5 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 000000000..99f28bbec 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 000000000..b0a3b44d1 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 000000000..1b2583d34 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 000000000..7c9d1b09c 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 000000000..0039e804e 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 000000000..44c28e2f2 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 000000000..61b0e7043 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 000000000..be3ba821a 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 000000000..ed20c0706 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 000000000..beb641078 --- /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 000000000..f1a2e46a1 --- /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 000000000..5fe6bfea7 --- /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 000000000..83e61f012 --- /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 c5a574279..b01e8cfa5 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 6aacd3673..854dfa3c6 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 e07c3bf67..2f8ecc434 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