make seperate menu items for audio and video calls

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 31 
src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java   | 13 
src/main/res/drawable-hdpi/ic_call_black_24dp.png                 |  0 
src/main/res/drawable-hdpi/ic_videocam_black_24dp.png             |  0 
src/main/res/drawable-hdpi/ic_videocam_white_24dp.png             |  0 
src/main/res/drawable-mdpi/ic_call_black_24dp.png                 |  0 
src/main/res/drawable-mdpi/ic_videocam_black_24dp.png             |  0 
src/main/res/drawable-mdpi/ic_videocam_white_24dp.png             |  0 
src/main/res/drawable-xhdpi/ic_call_black_24dp.png                |  0 
src/main/res/drawable-xhdpi/ic_videocam_black_24dp.png            |  0 
src/main/res/drawable-xhdpi/ic_videocam_white_24dp.png            |  0 
src/main/res/drawable-xxhdpi/ic_call_black_24dp.png               |  0 
src/main/res/drawable-xxhdpi/ic_videocam_black_24dp.png           |  0 
src/main/res/drawable-xxhdpi/ic_videocam_white_24dp.png           |  0 
src/main/res/drawable-xxxhdpi/ic_call_black_24dp.png              |  0 
src/main/res/drawable-xxxhdpi/ic_videocam_black_24dp.png          |  0 
src/main/res/drawable-xxxhdpi/ic_videocam_white_24dp.png          |  0 
src/main/res/drawable/ic_call_black54_24dp.xml                    |  4 
src/main/res/drawable/ic_call_white70_24dp.xml                    |  4 
src/main/res/drawable/ic_videocam_black54_24dp.xml                |  4 
src/main/res/drawable/ic_videocam_white70_24dp.xml                |  4 
src/main/res/menu/fragment_conversation.xml                       | 13 
src/main/res/values/attrs.xml                                     |  3 
src/main/res/values/strings.xml                                   |  2 
src/main/res/values/themes.xml                                    |  6 
25 files changed, 73 insertions(+), 11 deletions(-)

Detailed changes

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

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

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">
+        <menu>
+            <item
+                android:id="@+id/action_audio_call"
+                android:icon="?attr/ic_make_audio_call"
+                android:title="@string/audio_call" />
+            <item
+                android:id="@+id/action_video_call"
+                android:icon="?attr/ic_make_video_call"
+                android:title="@string/video_call" />
+        </menu>
+    </item>
     <item
         android:id="@+id/action_contact_details"
         android:orderInCategory="40"

src/main/res/values/attrs.xml ๐Ÿ”—

@@ -45,6 +45,9 @@
     <attr name="ic_attach_photo" format="reference"/>
     <attr name="ic_attach_record" format="reference"/>
 
+    <attr name="ic_make_audio_call" format="reference"/>
+    <attr name="ic_make_video_call" format="reference"/>
+
 
 
     <attr name="ic_cloud_download" format="reference"/>

src/main/res/values/strings.xml ๐Ÿ”—

@@ -908,6 +908,8 @@
     <string name="outgoing_call">Outgoing call</string>
     <string name="outgoing_call_duration">Outgoing call ยท %s</string>
     <string name="missed_call">Missed call</string>
+    <string name="audio_call">Audio call</string>
+    <string name="video_call">Video call</string>
     <plurals name="view_users">
         <item quantity="one">View %1$d Participant</item>
         <item quantity="other">View %1$d Participants</item>

src/main/res/values/themes.xml ๐Ÿ”—

@@ -54,6 +54,9 @@
         <item type="reference" name="ic_attach_photo">@drawable/ic_attach_photo</item>
         <item type="reference" name="ic_attach_record">@drawable/ic_attach_record</item>
 
+        <item type="reference" name="ic_make_audio_call">@drawable/ic_call_black54_24dp</item>
+        <item type="reference" name="ic_make_video_call">@drawable/ic_videocam_black54_24dp</item>
+
         <item type="reference" name="message_bubble_received_monochrome">@drawable/message_bubble_received_white</item>
         <item type="reference" name="message_bubble_sent">@drawable/message_bubble_sent</item>
         <item type="reference" name="message_bubble_received_green">@drawable/message_bubble_received</item>
@@ -164,6 +167,9 @@
         <item type="reference" name="ic_send_videocam_offline">@drawable/ic_send_videocam_offline_white</item>
         <item type="reference" name="ic_send_voice_offline">@drawable/ic_send_voice_offline_white</item>
 
+        <item type="reference" name="ic_make_audio_call">@drawable/ic_call_white70_24dp</item>
+        <item type="reference" name="ic_make_video_call">@drawable/ic_videocam_white70_24dp</item>
+
         <item type="reference" name="ic_attach_camera">@drawable/ic_attach_camera_white</item>
         <item type="reference" name="ic_attach_videocam">@drawable/ic_attach_videocam_white</item>
         <item type="reference" name="ic_attach_document">@drawable/ic_attach_document_white</item>