From 08f5ade325640662ee1f6df3ee2fab94a7858c06 Mon Sep 17 00:00:00 2001 From: Stas Safyanov Date: Fri, 3 Nov 2017 19:28:53 +0200 Subject: [PATCH 1/3] implemented p2p voice ui --- .../ui/activities/HomeActivity.java | 2 + .../ui/activities/calls/CallActivity.java | 26 +-- .../contacts/AddContactByPhoneFragment.java | 2 +- .../contacts/CountryPickerFragment.java | 2 +- .../icons_voice_call_ic_unmute_voice_call.png | Bin 0 -> 1385 bytes .../icons_voice_call_ic_unmute_voice_call.png | Bin 0 -> 844 bytes .../icons_voice_call_ic_unmute_voice_call.png | Bin 0 -> 1844 bytes .../icons_voice_call_ic_unmute_voice_call.png | Bin 0 -> 2978 bytes .../icons_voice_call_ic_unmute_voice_call.png | Bin 0 -> 4096 bytes app/src/main/res/drawable/button_hangup.xml | 14 ++ .../main/res/drawable/speaker_selector.xml | 9 + app/src/main/res/drawable/v_chat.xml | 29 ++++ app/src/main/res/drawable/v_hangup_call.xml | 11 ++ app/src/main/res/drawable/v_port_out.xml | 19 +++ app/src/main/res/drawable/v_ring_call.xml | 11 ++ app/src/main/res/drawable/v_speaker_off.xml | 11 ++ app/src/main/res/drawable/v_speaker_on.xml | 21 +++ .../main/res/drawable/v_voice_call_mute.xml | 18 ++ .../main/res/drawable/v_voice_call_unmute.xml | 11 ++ app/src/main/res/drawable/voice_selector.xml | 11 ++ app/src/main/res/layout/activity_call.xml | 19 +-- ....xml => fragment_add_contact_by_phone.xml} | 0 ...picker.xml => fragment_country_picker.xml} | 0 .../main/res/layout/partial_audio_active.xml | 156 +++++++++++------- .../main/res/layout/partial_chat_audio.xml | 1 - app/src/main/res/values/strings.xml | 6 + 26 files changed, 299 insertions(+), 80 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/icons_voice_call_ic_unmute_voice_call.png create mode 100644 app/src/main/res/drawable-mdpi/icons_voice_call_ic_unmute_voice_call.png create mode 100644 app/src/main/res/drawable-xhdpi/icons_voice_call_ic_unmute_voice_call.png create mode 100644 app/src/main/res/drawable-xxhdpi/icons_voice_call_ic_unmute_voice_call.png create mode 100644 app/src/main/res/drawable-xxxhdpi/icons_voice_call_ic_unmute_voice_call.png create mode 100644 app/src/main/res/drawable/button_hangup.xml create mode 100644 app/src/main/res/drawable/speaker_selector.xml create mode 100644 app/src/main/res/drawable/v_chat.xml create mode 100644 app/src/main/res/drawable/v_hangup_call.xml create mode 100644 app/src/main/res/drawable/v_port_out.xml create mode 100644 app/src/main/res/drawable/v_ring_call.xml create mode 100644 app/src/main/res/drawable/v_speaker_off.xml create mode 100644 app/src/main/res/drawable/v_speaker_on.xml create mode 100644 app/src/main/res/drawable/v_voice_call_mute.xml create mode 100644 app/src/main/res/drawable/v_voice_call_unmute.xml create mode 100644 app/src/main/res/drawable/voice_selector.xml rename app/src/main/res/layout/{fragmnet_add_contact_by_phone.xml => fragment_add_contact_by_phone.xml} (100%) rename app/src/main/res/layout/{fragmnet_country_picker.xml => fragment_country_picker.xml} (100%) diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java index 1b357bf89a..719c68fc8a 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java @@ -87,6 +87,7 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O @BindView(R.id.chat_active_video) SurfaceViewRenderer video; @BindView(R.id.chat_audio_layout) View chatAudioLayout; + @BindView(R.id.chat_audio_name) TextView chatAudioName; @BindView(R.id.chat_audio_duration) TextView duration; @BindView(R.id.chat_audio_photo) ImageView audioAvatar; @@ -409,6 +410,7 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O if (!activeCall.isOwnStreamActive || !activeCall.isRemoteStreamActive) { video.setVisibility(View.GONE); chatAudioLayout.setVisibility(View.VISIBLE); + chatAudioName.setText(activeCall.name); mPresenter.requestPhoto(); if (activeCall.remoteStream != null) activeCall.remoteStream.removeVideoRenderer(video); diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java index 28a6c59c93..7ec234ba80 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java @@ -4,7 +4,9 @@ import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.constraint.ConstraintLayout; +import android.support.v7.widget.AppCompatCheckBox; import android.view.View; +import android.widget.CheckedTextView; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; @@ -60,8 +62,8 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent @BindView(R.id.call_active_name) TextView name; @BindView(R.id.call_active_status) TextView status; @BindView(R.id.call_active_user_photo) ImageView userPhoto; - @BindView(R.id.audio_active_speaker_image) ImageView speakerImage; - @BindView(R.id.audio_active_mute_image) ImageView muteImage; +// @BindView(R.id.audio_active_speaker_image) ImageView speakerImage; +// @BindView(R.id.audio_active_mute_image) ImageView muteImage; @InjectPresenter CallPresenter mPresenter; @@ -127,7 +129,7 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent @Override public void onCallConnected(ActiveCall activeCall) { runOnUiThread(() -> { - hangUp.setVisibility(View.GONE); +// hangUp.setVisibility(View.GONE); if (activeCall.mCall.isVideoEnabled()) { videoCall(activeCall); status.setVisibility(View.GONE); @@ -194,12 +196,12 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent videoIncomeLayout.setVisibility(View.GONE); videoOutgoingLayout.setVisibility(View.GONE); - if (activeCall.isCallInProgress) { - audioIncomeLayout.setVisibility(View.VISIBLE); - name.setVisibility(View.VISIBLE); - } else { - hangUp.setVisibility(View.VISIBLE); - } +// if (activeCall.isCallInProgress) { + audioIncomeLayout.setVisibility(View.VISIBLE); + name.setVisibility(View.VISIBLE); +// } else { +// hangUp.setVisibility(View.VISIBLE); +// } }); } @@ -247,8 +249,10 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent private void initCall(ActiveCall activeCall) { if (!activeCall.isOwnStreamActive || !activeCall.isRemoteStreamActive) { audioCall(activeCall); - muteImage.setVisibility(activeCall.isMuted ? View.VISIBLE : View.GONE); - speakerImage.setVisibility(activeCall.isSpeakerOn ? View.VISIBLE : View.GONE); +// muteImage.setVisibility(activeCall.isMuted ? View.VISIBLE : View.GONE); +// speakerImage.setVisibility(activeCall.isSpeakerOn ? View.VISIBLE : View.GONE); +// audioSpeaker.setChecked(activeCall.isSpeakerOn); +// audioMute.setChecked(activeCall.isMuted); if (activeCall.remoteStream != null) activeCall.remoteStream.removeVideoRenderer(videoRemote); if (activeCall.ownStream != null) diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/AddContactByPhoneFragment.java b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/AddContactByPhoneFragment.java index c121c0aa30..c4e28cd4b3 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/AddContactByPhoneFragment.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/AddContactByPhoneFragment.java @@ -50,7 +50,7 @@ public class AddContactByPhoneFragment extends BaseFragment implements AddContac @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragmnet_add_contact_by_phone, container, false); + return inflater.inflate(R.layout.fragment_add_contact_by_phone, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/CountryPickerFragment.java b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/CountryPickerFragment.java index 05b8800385..a436649272 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/CountryPickerFragment.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/fragments/contacts/CountryPickerFragment.java @@ -47,7 +47,7 @@ public class CountryPickerFragment extends BaseFragment implements CountryPicker @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - return inflater.inflate(R.layout.fragmnet_country_picker, container, false); + return inflater.inflate(R.layout.fragment_country_picker, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { diff --git a/app/src/main/res/drawable-hdpi/icons_voice_call_ic_unmute_voice_call.png b/app/src/main/res/drawable-hdpi/icons_voice_call_ic_unmute_voice_call.png new file mode 100644 index 0000000000000000000000000000000000000000..d81e36c096e9b6251b3d01b038d13eadd1161014 GIT binary patch literal 1385 zcmV-v1(y1WP) zn2Y-0gFYydrznaK5{b9yn+QT8A}H!2zIX}2HTohNqQ4_3E5Hk=n5Hk=n&};@u&2|jguUsx)fxUZRAuumTpqbeIeMunx9^ z%N`2-<31ToVg`I|vpR`>6wYciG5TBy+d%RUtZp=>YmXEBB=`U%yI@Hx!P0*UJPVQ$ zxS^HtUDKDqH)saP0qDyb7-OH45o90C&1$D3;|O>b=u{Ym<#~c&{ABnTBroK#)%LLj zyk1cw?}l)WoyCc@a#+oe&L*yb`+{iu;*fH4jf}s zG#JV*cD9-=ZN!2~A&DTuK8td<=}=0$PDx+#8Sta1L}<$_`MIKkeY!ojAIxx3i8$RN zJQ*y~iXpdmMqs-=MI|D1oQ2zqiLeyMM8rhYo^5eO#1#=&L~RD*im1&;yhemr5&XE) z&DBS0bDPvkr)Vp*i8y-U4Y)juqtmhsN{xAl@^PFGphw_oersdzQL^@QrymPUo|Jj^Ni3M=FrOb=x-pDPhK-zldAQ1APH4fP$0 zs1wh&takIB8jbvh{`PQt!4n-S5&FiEOsS}zL#Ah&4y9(**>``#c^!mG#2*%jPkgV{ z`|<`@H~u24yM6cfXI;ORtDzF{yLrCA^e*&YFq`W~$oq@enEf55-Jkon=GIlHMC`%! zD9mT#)3|7zpsaTsbWX2>+=AU17`e*~y={7t=^ssZUJ>XgAX%ko&^ITw%5%@&yb)q+ zz1jQ1ZBhTu+OGGuj%xyX*n+A);-l_Q!Uri&&Ke|RZv?#>Ah}j{(EbQe4~8?_&KlF0 z;|OLZ=y%7zu*`zJgz`aBW%buY|r1 z^i*8(Im~M|VER4?CqVKZxXs&=mP&%oZq{Dg`VpL75&FS`-0Y62FN3|-u2u6YT;<2p zns&WLv<8O2Y-TH`%`zPY+Ov;6Z*QhcdaJan_w6u??CligYrVqi)FvSsbqvky%e$*l2xFIQobF0 zCFuIl^7W=82_w+->F_J{d%?HFNlesrF&%(auo9Mn?r&6u`lX;dPcEA&R1;L~*v$n3 z*6TxqJ_EE?!4t3q#@x(ttQYQttuP9bqi|nQ^YveIMcGg6GJ#ttJOztWj`YJ!x72h~ zWj~w==YzJ*y7lIdVCAXC_z6w4`W>)IF!f;pIS+);k@xZ^9Io~!8xGo z!;>J{0e65drc)aXpLmCv^kpDsee<*D)$#XY2UpS?MFYF=Hn#GjocB&4cUFr r!sCn%Vg_OcVg_OcVg_Ocn$Ey~A`Xe>jQ(hh00000NkvXXu0mjfg$kbx literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/icons_voice_call_ic_unmute_voice_call.png b/app/src/main/res/drawable-mdpi/icons_voice_call_ic_unmute_voice_call.png new file mode 100644 index 0000000000000000000000000000000000000000..cce9f10912d064cb13b068f8c2e9ab78e66494a1 GIT binary patch literal 844 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/button_hangup.xml b/app/src/main/res/drawable/button_hangup.xml new file mode 100644 index 0000000000..4e833a61fe --- /dev/null +++ b/app/src/main/res/drawable/button_hangup.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/speaker_selector.xml b/app/src/main/res/drawable/speaker_selector.xml new file mode 100644 index 0000000000..1fd2f87f3d --- /dev/null +++ b/app/src/main/res/drawable/speaker_selector.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/v_chat.xml b/app/src/main/res/drawable/v_chat.xml new file mode 100644 index 0000000000..61f5936aa4 --- /dev/null +++ b/app/src/main/res/drawable/v_chat.xml @@ -0,0 +1,29 @@ + + + + + + diff --git a/app/src/main/res/drawable/v_hangup_call.xml b/app/src/main/res/drawable/v_hangup_call.xml new file mode 100644 index 0000000000..54d909f33e --- /dev/null +++ b/app/src/main/res/drawable/v_hangup_call.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/v_port_out.xml b/app/src/main/res/drawable/v_port_out.xml new file mode 100644 index 0000000000..d1dc21b4ba --- /dev/null +++ b/app/src/main/res/drawable/v_port_out.xml @@ -0,0 +1,19 @@ + + + + diff --git a/app/src/main/res/drawable/v_ring_call.xml b/app/src/main/res/drawable/v_ring_call.xml new file mode 100644 index 0000000000..2bcab8b992 --- /dev/null +++ b/app/src/main/res/drawable/v_ring_call.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/v_speaker_off.xml b/app/src/main/res/drawable/v_speaker_off.xml new file mode 100644 index 0000000000..5cb820a654 --- /dev/null +++ b/app/src/main/res/drawable/v_speaker_off.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/v_speaker_on.xml b/app/src/main/res/drawable/v_speaker_on.xml new file mode 100644 index 0000000000..afc77cf906 --- /dev/null +++ b/app/src/main/res/drawable/v_speaker_on.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/drawable/v_voice_call_mute.xml b/app/src/main/res/drawable/v_voice_call_mute.xml new file mode 100644 index 0000000000..07c3559cb0 --- /dev/null +++ b/app/src/main/res/drawable/v_voice_call_mute.xml @@ -0,0 +1,18 @@ + + + + diff --git a/app/src/main/res/drawable/v_voice_call_unmute.xml b/app/src/main/res/drawable/v_voice_call_unmute.xml new file mode 100644 index 0000000000..5678a8a79f --- /dev/null +++ b/app/src/main/res/drawable/v_voice_call_unmute.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/voice_selector.xml b/app/src/main/res/drawable/voice_selector.xml new file mode 100644 index 0000000000..0756e8df05 --- /dev/null +++ b/app/src/main/res/drawable/voice_selector.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml index 84e790ae3e..593508318c 100644 --- a/app/src/main/res/layout/activity_call.xml +++ b/app/src/main/res/layout/activity_call.xml @@ -13,27 +13,26 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="H,16:10" app:layout_constraintTop_toTopOf="parent" - tools:layout_editor_absoluteX="0dp" tools:src="@drawable/avatar_placeholder" /> + app:layout_constraintTop_toTopOf="@+id/call_active_user_photo" + tools:text="Name"/> + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent"> + tools:text="Name"/> + tools:text="Voice call - 00:35"/> + app:srcCompat="@drawable/voice_selector" + app:layout_constraintBottom_toTopOf="@+id/audio_active_mute_text" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toEndOf="@+id/audio_active_port_out" + app:layout_constraintTop_toBottomOf="@+id/audio_active_duration" + app:layout_constraintVertical_bias="0.8" + app:layout_constraintVertical_chainStyle="packed"/> + android:id="@+id/audio_active_port_out" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + app:srcCompat="@drawable/v_port_out" + app:layout_constraintBottom_toTopOf="@+id/audio_active_port_out_text" + app:layout_constraintEnd_toStartOf="@+id/audio_active_mute" + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/audio_active_duration" + app:layout_constraintVertical_bias="0.8" + app:layout_constraintVertical_chainStyle="packed"/> + + + app:layout_constraintEnd_toStartOf="@+id/audio_active_hangup" + app:layout_constraintHorizontal_chainStyle="spread" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/audio_active_speaker"/> + android:id="@+id/audio_active_hangup" + android:layout_width="68dp" + android:layout_height="68dp" + android:layout_marginBottom="16dp" + android:src="@drawable/button_hangup" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"/> + app:srcCompat="@drawable/v_chat" + app:layout_constraintBottom_toTopOf="@+id/audio_active_text_text" + app:layout_constraintEnd_toEndOf="@+id/audio_active_text_text" + app:layout_constraintStart_toStartOf="@+id/audio_active_text_text" + app:layout_constraintTop_toTopOf="@+id/audio_active_hangup" + app:layout_constraintVertical_chainStyle="packed"/> - + android:fontFamily="@font/avenir_roman" + android:text="@string/return_to_chat" + android:textSize="12sp" + app:layout_constraintBottom_toBottomOf="@+id/audio_active_hangup" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@+id/audio_active_hangup" + app:layout_constraintTop_toBottomOf="@+id/audio_active_text"/> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/partial_chat_audio.xml b/app/src/main/res/layout/partial_chat_audio.xml index b22f1b6fff..c471e49cbd 100644 --- a/app/src/main/res/layout/partial_chat_audio.xml +++ b/app/src/main/res/layout/partial_chat_audio.xml @@ -47,7 +47,6 @@ android:layout_height="wrap_content" android:layout_weight="1" android:fontFamily="@font/avenir_medium" - android:text="@string/text.return_call" android:textColor="@color/white" android:textSize="16sp" tools:text="Shorty Design" /> diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e2c6287ce..e335b6d80d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -208,4 +208,10 @@ Username must be at least 2 characters Sorry, this username is already taken + + Port Out to Phone + Mute + Speakerphone + Return to Chat + -- GitLab From c4f5883cbf6796d42c1079536aaa2968167202fb Mon Sep 17 00:00:00 2001 From: Stas Safyanov Date: Mon, 6 Nov 2017 17:15:14 +0200 Subject: [PATCH 2/3] implemented new UI for outgoing and incoming p2p calls, fixed UI for vector images --- .../mobile/communicator/data/DataManager.java | 4 + .../mobile/communicator/data/db/DbHelper.java | 19 +- .../mvp/presenters/CallPresenter.java | 4 + .../mvp/presenters/HomePresenter.java | 11 + .../mvp/presenters/IncomeCallPresenter.java | 4 + .../communicator/mvp/view/HomeView.java | 4 + .../ui/activities/HomeActivity.java | 18 +- .../ui/activities/calls/CallActivity.java | 41 ++-- .../activities/calls/IncomeCallActivity.java | 12 +- .../ui/views/CheckableImageView.java | 193 ++++++++++++++++++ app/src/main/res/drawable/button_accept.xml | 18 ++ app/src/main/res/drawable/button_hangup.xml | 9 +- .../main/res/drawable/photo_circle_shape.xml | 6 +- .../main/res/drawable/speaker_selector.xml | 4 - app/src/main/res/drawable/voice_selector.xml | 10 +- app/src/main/res/layout/activity_call.xml | 98 +++++---- .../main/res/layout/activity_voice_call.xml | 38 ++-- .../res/layout/fragment_chat_settings.xml | 3 +- .../main/res/layout/fragment_create_chat.xml | 18 +- .../main/res/layout/partial_audio_active.xml | 35 ++-- .../main/res/layout/partial_chat_audio.xml | 5 +- .../main/res/layout/partial_voice_income.xml | 80 +++++--- app/src/main/res/values/attrs.xml | 3 + app/src/main/res/values/strings.xml | 4 +- 24 files changed, 480 insertions(+), 161 deletions(-) create mode 100644 app/src/main/java/com/nynja/mobile/communicator/ui/views/CheckableImageView.java create mode 100644 app/src/main/res/drawable/button_accept.xml diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java index 54075dce6f..6ff5156a95 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java @@ -923,4 +923,8 @@ public class DataManager { .observeOn(AndroidSchedulers.mainThread()); } + + public Contact getContactByVox(String voxId){ + return mDbHelper.getContactByVoxId(voxId); + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java index 1b9b773b80..5c206296e6 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java @@ -595,6 +595,23 @@ public class DbHelper { return contacts; } + public Contact getContactByVoxId(String voxId) { + Contact contact = null; + String rosterId = getProfile().getRoster().getRosterId(); + final Cursor cursor = mDb.query("SELECT * FROM " + ContactsTable.TABLE_NAME + " WHERE " + + ContactsTable.Column.PERSON_ID + " = '" + voxId + /*"' AND " + + ContactsTable.Column.ROSTER_ID + " = '" + rosterId +*/ "'"); + if (cursor != null) { + if (cursor.getCount() > 0) { + cursor.moveToFirst(); + contact = ContactsTable.parseCursor(cursor); + contact.message = getMessageByContactId(contact.phoneId, rosterId); + } + cursor.close(); + } + return contact; + } + public Observable> getGroupChatMsgs(String chatId) { return mDb.createQuery(MessagesTable.TABLE_NAME, "SELECT * FROM " + MessagesTable.TABLE_NAME + " WHERE " + @@ -793,6 +810,7 @@ public class DbHelper { } public void saveContact(Contact contact, Roster roster) { + if (!StringUtils.isNotEmpty(contact.phoneId)) return; BriteDatabase.Transaction transaction = mDb.newTransaction(); try { updateInsert(ContactsTable.TABLE_NAME, @@ -1149,5 +1167,4 @@ public class DbHelper { cursor.close(); } } - } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java index be22489618..a429c7a4f8 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java @@ -87,4 +87,8 @@ public class CallPresenter extends VoxPresenter implements CallListene @Override public void onStateChanged(ActiveCall activeCall) { getViewState().onCallStateChanged(activeCall); } + + public void onClickPortOut() { + //TODO StasS implement it + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java index 69e3c70b68..9871f7f2ad 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java @@ -244,4 +244,15 @@ public class HomePresenter extends VoxPresenter { @Override public void onCallFailed(String reason) { callEnded(); } + + @Override public void onCallRinging() { + getViewState().onCallRinging(); + } + + public void requestUserName(ActiveCall activeCall) { + Contact contactByVox = mDataManager.getContactByVox(activeCall.mEndPointId); + if (contactByVox != null) { + getViewState().setCallUserName(contactByVox.getFullName()); + } + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/IncomeCallPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/IncomeCallPresenter.java index 78d06913c2..e6ac60055d 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/IncomeCallPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/IncomeCallPresenter.java @@ -37,4 +37,8 @@ public class IncomeCallPresenter extends VoxPresenter { @Override public void activeCall(ActiveCall activeCall) { setCallWithUser(); } + + public void onPortOutClick() { + //TODO StasS implement it + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java index 2d8c504531..6380cdf357 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java @@ -28,4 +28,8 @@ public interface HomeView extends ErrorMvpView{ void onCallStateChanged(ActiveCall activeCall); void openActiveCall(); + + void onCallRinging(); + + void setCallUserName(String fullName); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java index 719c68fc8a..3108eb2715 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java @@ -89,6 +89,7 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O @BindView(R.id.chat_audio_layout) View chatAudioLayout; @BindView(R.id.chat_audio_name) TextView chatAudioName; @BindView(R.id.chat_audio_duration) TextView duration; + @BindView(R.id.chat_return_text) TextView headerStatusText; @BindView(R.id.chat_audio_photo) ImageView audioAvatar; @InjectPresenter HomePresenter mPresenter; @@ -359,6 +360,9 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O runOnUiThread(() -> { if (chatAudioLayout.getVisibility() == View.VISIBLE) { duration.setText(time); + if (!headerStatusText.getText().toString().equals(getString(R.string.text_return_call))) { + headerStatusText.setText(R.string.text_return_call); + } } }); } @@ -367,6 +371,9 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O runOnUiThread(() -> { video.setVisibility(View.GONE); chatAudioLayout.setVisibility(View.GONE); + duration.setText(""); + headerStatusText.setText(R.string.call_connecting); + chatAudioName.setText(""); }); } @@ -410,8 +417,8 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O if (!activeCall.isOwnStreamActive || !activeCall.isRemoteStreamActive) { video.setVisibility(View.GONE); chatAudioLayout.setVisibility(View.VISIBLE); - chatAudioName.setText(activeCall.name); mPresenter.requestPhoto(); + mPresenter.requestUserName(activeCall); if (activeCall.remoteStream != null) activeCall.remoteStream.removeVideoRenderer(video); } else { @@ -427,4 +434,13 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O @Override public void openActiveCall() { startActivity(CallActivity.getLaunchIntent(this)); } + + @Override public void onCallRinging() { + headerStatusText.setText(R.string.call_ringing); + } + + @Override public void setCallUserName(String fullName) { + chatAudioName.setText(fullName); + } + } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java index 7ec234ba80..0220a72988 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java @@ -22,6 +22,7 @@ import com.nynja.mobile.communicator.data.voximplant.VoxImplantModule; import com.nynja.mobile.communicator.mvp.presenters.CallPresenter; import com.nynja.mobile.communicator.mvp.view.CallView; import com.nynja.mobile.communicator.ui.base.BaseActivity; +import com.nynja.mobile.communicator.ui.views.CheckableImageView; import com.nynja.mobile.communicator.utils.DialogFactory; import com.voximplant.sdk.Voximplant; import com.voximplant.sdk.hardware.ICameraEventsListener; @@ -31,6 +32,7 @@ import com.voximplant.sdk.hardware.VideoQuality; import org.webrtc.SurfaceViewRenderer; import butterknife.BindView; +import butterknife.OnCheckedChanged; import butterknife.OnClick; import timber.log.Timber; @@ -54,16 +56,13 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent //audio controls @BindView(R.id.audio_active_hangup) ImageView audioHangUp; - @BindView(R.id.audio_active_mute) ImageView audioMute; - @BindView(R.id.audio_call_outgoing_hangup) ImageView hangUp; - @BindView(R.id.audio_active_speaker) ImageView audioSpeaker; - @BindView(R.id.audio_active_duration) TextView audioDuration; + @BindView(R.id.audio_active_mute) CheckableImageView audioMute; + @BindView(R.id.audio_active_speaker) CheckableImageView audioSpeaker; + @BindView(R.id.audio_active_mute_text) TextView muteText; - @BindView(R.id.call_active_name) TextView name; - @BindView(R.id.call_active_status) TextView status; + @BindView(R.id.audio_active_name) TextView name; + @BindView(R.id.audio_active_duration) TextView status; @BindView(R.id.call_active_user_photo) ImageView userPhoto; -// @BindView(R.id.audio_active_speaker_image) ImageView speakerImage; -// @BindView(R.id.audio_active_mute_image) ImageView muteImage; @InjectPresenter CallPresenter mPresenter; @@ -81,9 +80,14 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_call); + audioMute.setOnCheckedChangeListener((buttonView, isChecked) -> setMuteText(isChecked)); } - @OnClick({R.id.audio_active_hangup, R.id.video_active_hangup, R.id.audio_call_outgoing_hangup, R.id.video_outgoing_hangup}) + private void setMuteText(boolean isChecked) { + muteText.setText(isChecked ? R.string.mute : R.string.unmute); + } + + @OnClick({R.id.audio_active_hangup, R.id.video_active_hangup, R.id.video_outgoing_hangup}) void hangUp() { mPresenter.hangUp(); } @@ -108,6 +112,12 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent mPresenter.openChat(mContact); } + @OnClick({R.id.audio_active_port_out, R.id.audio_active_port_out_text}) + void clickPortOut() { + Toast.makeText(this, R.string.this_feature_is_currently_unavailable, Toast.LENGTH_SHORT).show(); + mPresenter.onClickPortOut(); + } + @Override public void onCameraSwitch() { mCameraType = (mCameraType == 0) ? 1 : 0; mCameraManager.setCamera(mCameraType, DEFAULT_VIDEO_QUALITY); @@ -129,7 +139,6 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent @Override public void onCallConnected(ActiveCall activeCall) { runOnUiThread(() -> { -// hangUp.setVisibility(View.GONE); if (activeCall.mCall.isVideoEnabled()) { videoCall(activeCall); status.setVisibility(View.GONE); @@ -195,13 +204,8 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent videoViewLayout.setVisibility(View.GONE); videoIncomeLayout.setVisibility(View.GONE); videoOutgoingLayout.setVisibility(View.GONE); - -// if (activeCall.isCallInProgress) { audioIncomeLayout.setVisibility(View.VISIBLE); name.setVisibility(View.VISIBLE); -// } else { -// hangUp.setVisibility(View.VISIBLE); -// } }); } @@ -249,10 +253,9 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent private void initCall(ActiveCall activeCall) { if (!activeCall.isOwnStreamActive || !activeCall.isRemoteStreamActive) { audioCall(activeCall); -// muteImage.setVisibility(activeCall.isMuted ? View.VISIBLE : View.GONE); -// speakerImage.setVisibility(activeCall.isSpeakerOn ? View.VISIBLE : View.GONE); -// audioSpeaker.setChecked(activeCall.isSpeakerOn); -// audioMute.setChecked(activeCall.isMuted); + audioSpeaker.setChecked(activeCall.isSpeakerOn); + audioMute.setChecked(activeCall.isMuted); + setMuteText(activeCall.isMuted); if (activeCall.remoteStream != null) activeCall.remoteStream.removeVideoRenderer(videoRemote); if (activeCall.ownStream != null) diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/IncomeCallActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/IncomeCallActivity.java index e4d232d97a..5e0faa151e 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/IncomeCallActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/IncomeCallActivity.java @@ -8,9 +8,11 @@ import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; import android.os.PowerManager; +import android.support.v7.app.AppCompatDelegate; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import com.arellomobile.mvp.presenter.InjectPresenter; import com.bumptech.glide.Glide; @@ -57,13 +59,14 @@ public class IncomeCallActivity extends BaseActivity implements IncomeCallView { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); setContentView(R.layout.activity_voice_call); PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); if (pm != null) mWl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, getClass().getSimpleName()); } - @OnClick(R.id.voice_call_income_accept) void answerVoiceClick(){ + @OnClick(R.id.voice_call_income_accept) void answerVoiceClick() { mPresenter.answerCall(false); } @@ -153,4 +156,11 @@ public class IncomeCallActivity extends BaseActivity implements IncomeCallView { private void stopSound() { player.stop(); } + + + @OnClick({R.id.voice_call_income_port_out, R.id.voice_call_income_port_out_text}) + void portOutClick() { + Toast.makeText(this, R.string.this_feature_is_currently_unavailable, Toast.LENGTH_SHORT).show(); + // mPresenter.onPortOutClick(); + } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/views/CheckableImageView.java b/app/src/main/java/com/nynja/mobile/communicator/ui/views/CheckableImageView.java new file mode 100644 index 0000000000..4f1afea9ea --- /dev/null +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/views/CheckableImageView.java @@ -0,0 +1,193 @@ +package com.nynja.mobile.communicator.ui.views; + +import android.content.Context; +import android.os.Parcel; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.widget.Checkable; + +/** + * Created by Stas Safyanov on 06.11.17. + */ + +public class CheckableImageView extends android.support.v7.widget.AppCompatImageView + implements Checkable { + +// private boolean mChecked; +// +// private static final int[] CHECKED_STATE_SET = { +// android.R.attr.state_checked +// }; +// +// public CheckableImageView(Context context, AttributeSet attrs) { +// super(context, attrs); +// } +// +// @Override +// public int[] onCreateDrawableState(int extraSpace) { +// final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); +// if (isChecked()) { +// mergeDrawableStates(drawableState, CHECKED_STATE_SET); +// } +// return drawableState; +// } +// +// public void toggle() { +// setChecked(!mChecked); +// } +// +// public boolean isChecked() { +// return mChecked; +// } +// +// public void setChecked(boolean checked) { +// if (mChecked != checked) { +// mChecked = checked; +// refreshDrawableState(); +// } +// } + + private static final int[] checkedStateSet = { android.R.attr.state_checked }; + + private boolean mChecked = false; + private OnCheckedChangeListener mOnCheckedChangeListener; + + private boolean mBroadcasting; + + public CheckableImageView(Context context) { + super(context); + } + + public CheckableImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CheckableImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public boolean isChecked() { + return mChecked; + } + + @Override + public boolean performClick() { + toggle(); + return super.performClick(); + } + + @Override + public void toggle() { + setChecked(!mChecked); + } + + @Override + public int[] onCreateDrawableState(int extraSpace) { + final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); + if (isChecked()) { + mergeDrawableStates(drawableState, checkedStateSet); + } + return drawableState; + } + + @Override + public void setChecked(boolean checked) { + if (mChecked != checked) { + mChecked = checked; + refreshDrawableState(); + + // Avoid infinite recursions if setChecked() is called from a listener + if (mBroadcasting) { + return; + } + + mBroadcasting = true; + if (mOnCheckedChangeListener != null) { + mOnCheckedChangeListener.onCheckedChanged(this, mChecked); + } + + mBroadcasting = false; + } + } + + /** + * Register a callback to be invoked when the checked state of this button + * changes. + * + * @param listener the callback to call on checked state change + */ + public void setOnCheckedChangeListener(OnCheckedChangeListener listener) { + mOnCheckedChangeListener = listener; + } + + /** + * Interface definition for a callback to be invoked when the checked state + * of a compound button changed. + */ + public static interface OnCheckedChangeListener { + /** + * Called when the checked state of a compound button has changed. + * + * @param buttonView The compound button view whose state has changed. + * @param isChecked The new checked state of buttonView. + */ + void onCheckedChanged(CheckableImageView buttonView, boolean isChecked); + } + + static class SavedState extends BaseSavedState { + boolean checked; + + SavedState(Parcelable superState) { + super(superState); + } + + /** + * Constructor called from {@link #CREATOR} + */ + private SavedState(Parcel in) { + super(in); + checked = (Boolean) in.readValue(null); + } + + @Override + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeValue(checked); + } + + @Override + public String toString() { + return "CheckableImageView.SavedState{" + Integer.toHexString(System.identityHashCode(this)) + " checked=" + checked + "}"; + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState ss = new SavedState(superState); + ss.checked = isChecked(); + return ss; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState ss = (SavedState) state; + + super.onRestoreInstanceState(ss.getSuperState()); + setChecked(ss.checked); + requestLayout(); + } +} diff --git a/app/src/main/res/drawable/button_accept.xml b/app/src/main/res/drawable/button_accept.xml new file mode 100644 index 0000000000..f700219c1c --- /dev/null +++ b/app/src/main/res/drawable/button_accept.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_hangup.xml b/app/src/main/res/drawable/button_hangup.xml index 4e833a61fe..fe6c2ba817 100644 --- a/app/src/main/res/drawable/button_hangup.xml +++ b/app/src/main/res/drawable/button_hangup.xml @@ -2,13 +2,16 @@ - + + android:height="68dp"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/photo_circle_shape.xml b/app/src/main/res/drawable/photo_circle_shape.xml index c33537d000..6222cb9411 100644 --- a/app/src/main/res/drawable/photo_circle_shape.xml +++ b/app/src/main/res/drawable/photo_circle_shape.xml @@ -11,5 +11,9 @@ + android:top="16dp" + android:bottom="16dp" + android:left="16dp" + android:right="16dp" + android:gravity="center"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/speaker_selector.xml b/app/src/main/res/drawable/speaker_selector.xml index 1fd2f87f3d..e0cb96c352 100644 --- a/app/src/main/res/drawable/speaker_selector.xml +++ b/app/src/main/res/drawable/speaker_selector.xml @@ -1,8 +1,4 @@ - - - - diff --git a/app/src/main/res/drawable/voice_selector.xml b/app/src/main/res/drawable/voice_selector.xml index 0756e8df05..990339f813 100644 --- a/app/src/main/res/drawable/voice_selector.xml +++ b/app/src/main/res/drawable/voice_selector.xml @@ -1,11 +1,5 @@ - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_call.xml b/app/src/main/res/layout/activity_call.xml index 593508318c..621c4bfc29 100644 --- a/app/src/main/res/layout/activity_call.xml +++ b/app/src/main/res/layout/activity_call.xml @@ -1,42 +1,52 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + tools:src="@drawable/avatar_placeholder"/> - + - + + + + + + + + + + + + + + + + + + + + + + + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> @@ -75,7 +85,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> + app:layout_constraintTop_toTopOf="parent"/> - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_voice_call.xml b/app/src/main/res/layout/activity_voice_call.xml index d869b98ff6..61c56abfa1 100644 --- a/app/src/main/res/layout/activity_voice_call.xml +++ b/app/src/main/res/layout/activity_voice_call.xml @@ -9,34 +9,20 @@ android:id="@+id/imageView" android:layout_width="0dp" android:layout_height="0dp" - android:src="@drawable/contact_placeholder" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintLeft_toLeftOf="parent" - app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="parent" /> - - - + tools:src="@drawable/avatar_placeholder"/> - + - - + app:srcCompat="@drawable/photo_circle_shape"/> @@ -177,26 +177,26 @@ android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:srcCompat="@drawable/v_right_arrow_white" app:layout_constraintBottom_toBottomOf="@+id/f_create_group_tv_name" app:layout_constraintRight_toRightOf="parent" - app:layout_constraintTop_toTopOf="@+id/textView3"/> + app:layout_constraintTop_toTopOf="@+id/textView3" + app:srcCompat="@drawable/v_right_arrow_white"/> + app:layout_constraintTop_toTopOf="@+id/textView5" + app:srcCompat="@drawable/v_right_arrow_white"/> + app:srcCompat="@drawable/v_right_arrow_white"/> \ No newline at end of file diff --git a/app/src/main/res/layout/partial_audio_active.xml b/app/src/main/res/layout/partial_audio_active.xml index 01d6610242..44579036e8 100644 --- a/app/src/main/res/layout/partial_audio_active.xml +++ b/app/src/main/res/layout/partial_audio_active.xml @@ -11,6 +11,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/avenir_medium" + android:textColor="@color/white" android:textSize="24sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" @@ -23,38 +24,41 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/avenir_roman" + android:textColor="@color/white" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/audio_active_name" tools:text="Voice call - 00:35"/> - + + app:layout_constraintVertical_chainStyle="packed" + app:srcCompat="@drawable/voice_selector"/> + app:layout_constraintVertical_chainStyle="packed" + app:srcCompat="@drawable/v_port_out"/> - @@ -92,19 +98,20 @@ android:id="@+id/audio_active_text" android:layout_width="wrap_content" android:layout_height="wrap_content" - app:srcCompat="@drawable/v_chat" app:layout_constraintBottom_toTopOf="@+id/audio_active_text_text" app:layout_constraintEnd_toEndOf="@+id/audio_active_text_text" app:layout_constraintStart_toStartOf="@+id/audio_active_text_text" app:layout_constraintTop_toTopOf="@+id/audio_active_hangup" - app:layout_constraintVertical_chainStyle="packed"/> + app:layout_constraintVertical_chainStyle="packed" + app:srcCompat="@drawable/v_chat"/> + app:layout_constraintTop_toBottomOf="@+id/audio_active_mute" + tools:text="@string/mute"/> \ No newline at end of file diff --git a/app/src/main/res/layout/partial_chat_audio.xml b/app/src/main/res/layout/partial_chat_audio.xml index c471e49cbd..af0ef85a0e 100644 --- a/app/src/main/res/layout/partial_chat_audio.xml +++ b/app/src/main/res/layout/partial_chat_audio.xml @@ -33,7 +33,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/avenir_roman" - android:text="@string/text.return_call" + android:text="@string/call.connecting" android:textColor="@color/white" /> + android:textSize="14sp"/> diff --git a/app/src/main/res/layout/partial_voice_income.xml b/app/src/main/res/layout/partial_voice_income.xml index d2b21fd5ca..579b4ada21 100644 --- a/app/src/main/res/layout/partial_voice_income.xml +++ b/app/src/main/res/layout/partial_voice_income.xml @@ -1,47 +1,77 @@ - + - + + + + + + app:layout_constraintRight_toLeftOf="@+id/voice_call_income_accept"/> - + app:layout_constraintRight_toRightOf="parent"/> - + app:layout_constraintBottom_toTopOf="@+id/voice_call_income_port_out_text" + app:layout_constraintEnd_toEndOf="@+id/voice_call_income_port_out_text" + app:layout_constraintStart_toStartOf="@+id/voice_call_income_port_out_text" + app:srcCompat="@drawable/v_port_out"/> + android:layout_marginBottom="26dp" + android:fontFamily="@font/avenir_roman" + android:text="@string/port.out.to.phone" + android:textColor="@color/white" + android:textSize="12sp" + app:layout_constraintBottom_toTopOf="@+id/voice_call_income_decline" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"/> \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index d3ee592579..51f1ad8b6f 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -118,4 +118,7 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e335b6d80d..887485c852 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -128,7 +128,7 @@ Incoming voice call… Incoming video call… Voice call - %1$s - Call connecting… + Connecting… Ringing… @@ -211,7 +211,9 @@ Port Out to Phone Mute + Unmute Speakerphone Return to Chat + This feature is currently unavailable -- GitLab From 81fa5989b3de49ce9c4198fc56a80d4d7434dfc6 Mon Sep 17 00:00:00 2001 From: Stas Safyanov Date: Tue, 7 Nov 2017 13:09:21 +0200 Subject: [PATCH 3/3] refactoring code, fixed status on call activity, added switch speaker state, fixed ui for video call --- .../mobile/communicator/data/DataManager.java | 4 ---- .../mobile/communicator/data/db/DbHelper.java | 17 ----------------- .../data/voximplant/ActiveCall.java | 1 + .../data/voximplant/VoxService.java | 11 +++++++++++ .../mvp/presenters/CallPresenter.java | 5 ++++- .../mvp/presenters/HomePresenter.java | 10 +++------- .../mobile/communicator/mvp/view/HomeView.java | 2 +- .../ui/activities/HomeActivity.java | 5 ++--- .../ui/activities/calls/CallActivity.java | 5 +++-- app/src/main/res/values/strings.xml | 4 ++-- 10 files changed, 27 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java index 823845d087..d572e6d56a 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/DataManager.java @@ -926,8 +926,4 @@ public class DataManager { .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } - - public Contact getContactByVox(String voxId){ - return mDbHelper.getContactByVoxId(voxId); - } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java index 299859201f..2d8a9036b2 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/db/DbHelper.java @@ -595,23 +595,6 @@ public class DbHelper { return contacts; } - public Contact getContactByVoxId(String voxId) { - Contact contact = null; - String rosterId = getProfile().getRoster().getRosterId(); - final Cursor cursor = mDb.query("SELECT * FROM " + ContactsTable.TABLE_NAME + " WHERE " + - ContactsTable.Column.PERSON_ID + " = '" + voxId + /*"' AND " + - ContactsTable.Column.ROSTER_ID + " = '" + rosterId +*/ "'"); - if (cursor != null) { - if (cursor.getCount() > 0) { - cursor.moveToFirst(); - contact = ContactsTable.parseCursor(cursor); - contact.message = getMessageByContactId(contact.phoneId, rosterId); - } - cursor.close(); - } - return contact; - } - public Observable> getGroupChatMsgs(String chatId) { return mDb.createQuery(MessagesTable.TABLE_NAME, "SELECT * FROM " + MessagesTable.TABLE_NAME + " WHERE " + diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/ActiveCall.java b/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/ActiveCall.java index a8cfa6d400..9036ba9f49 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/ActiveCall.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/ActiveCall.java @@ -19,6 +19,7 @@ public class ActiveCall { public IVideoStream ownStream; public boolean isRemoteStreamActive; public IVideoStream remoteStream; + public boolean isRinging; public ActiveCall(ICall call, String endPointId) { mCall = call; diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/VoxService.java b/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/VoxService.java index 881160169c..e2e6691f3d 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/VoxService.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/voximplant/VoxService.java @@ -180,12 +180,14 @@ public class VoxService extends Service implements SensorEventListener { try { if (isProximityNear) { mWakeLock.acquire(); + } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) mWakeLock.release(1); else mWakeLock.release(); } + setSpeakerData(isProximityNear); } catch (Exception x) { Timber.e(x); } @@ -193,6 +195,15 @@ public class VoxService extends Service implements SensorEventListener { } } + private void setSpeakerData(boolean isProximityNear) { + VoxImplantModule implantModule = mDataManager.getVoxImlant(); + ActiveCall activeCall = implantModule.getActiveCall(); + if ((activeCall.isSpeakerOn && isProximityNear) + || (!activeCall.isSpeakerOn && !isProximityNear)){ + implantModule.setSpeaker(); + } + } + @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java index a429c7a4f8..d3594443be 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/CallPresenter.java @@ -15,7 +15,9 @@ public class CallPresenter extends VoxPresenter implements CallListene @Override protected void onFirstViewAttach() { super.onFirstViewAttach(); - getViewState().initStates(mDataManager.getVoxImlant().getActiveCall()); + ActiveCall activeCall = mDataManager.getVoxImlant().getActiveCall(); + getViewState().initStates(activeCall); + if (activeCall.isRinging) onCallRinging(); } public void switchCamera() { @@ -72,6 +74,7 @@ public class CallPresenter extends VoxPresenter implements CallListene } @Override public void onCallRinging() { + mDataManager.getVoxImlant().getActiveCall().isRinging = true; getViewState().onCallRinging(); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java index 9871f7f2ad..46cc75fb4d 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/presenters/HomePresenter.java @@ -216,11 +216,12 @@ public class HomePresenter extends VoxPresenter { getViewState().openActiveCall(); } - public void requestPhoto() { + public void requestUser() { String username = mDataManager.getVoxImlant().getAnotherUsername(); if (username != null) { Contact contact = mDataManager.getProfile().getRoster().getContactByVoxUser(username); getViewState().onAudioCallPhoto(contact.avatar); + getViewState().onAudioCallName(contact.getFullName()); } } @@ -246,13 +247,8 @@ public class HomePresenter extends VoxPresenter { } @Override public void onCallRinging() { + mDataManager.getVoxImlant().getActiveCall().isRinging = true; getViewState().onCallRinging(); } - public void requestUserName(ActiveCall activeCall) { - Contact contactByVox = mDataManager.getContactByVox(activeCall.mEndPointId); - if (contactByVox != null) { - getViewState().setCallUserName(contactByVox.getFullName()); - } - } } diff --git a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java index 6380cdf357..0758cc3ac3 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java +++ b/app/src/main/java/com/nynja/mobile/communicator/mvp/view/HomeView.java @@ -31,5 +31,5 @@ public interface HomeView extends ErrorMvpView{ void onCallRinging(); - void setCallUserName(String fullName); + void onAudioCallName(String fullName); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java index 3108eb2715..cb2a971820 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/HomeActivity.java @@ -417,8 +417,7 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O if (!activeCall.isOwnStreamActive || !activeCall.isRemoteStreamActive) { video.setVisibility(View.GONE); chatAudioLayout.setVisibility(View.VISIBLE); - mPresenter.requestPhoto(); - mPresenter.requestUserName(activeCall); + mPresenter.requestUser(); if (activeCall.remoteStream != null) activeCall.remoteStream.removeVideoRenderer(video); } else { @@ -439,7 +438,7 @@ public class HomeActivity extends BaseActivity implements HomeView, MenuButton.O headerStatusText.setText(R.string.call_ringing); } - @Override public void setCallUserName(String fullName) { + @Override public void onAudioCallName(String fullName) { chatAudioName.setText(fullName); } diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java index 0220a72988..f3bd57025b 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/activities/calls/CallActivity.java @@ -47,7 +47,7 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent @BindView(R.id.video_outgoing_layout) ConstraintLayout videoOutgoingLayout; //video controls - @BindView(R.id.video_active_switch_audio) ImageView swithToAudio; + @BindView(R.id.video_active_switch_audio) ImageView switchToAudio; @BindView(R.id.video_active_hangup) ImageView videoHangUp; @BindView(R.id.video_active_switch_camera) ImageView videoSwithCam; @BindView(R.id.video_active_duration) TextView videoDuration; @@ -217,6 +217,7 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent videoIncomeLayout.setVisibility(View.VISIBLE); videoOutgoingLayout.setVisibility(View.GONE); name.setVisibility(View.GONE); + audioIncomeLayout.setVisibility(View.GONE); videoViewLayout.setVisibility(View.VISIBLE); videoRemote.setVisibility(View.VISIBLE); } else { @@ -241,8 +242,8 @@ public class CallActivity extends BaseActivity implements CallView, ICameraEvent } } mPresenter.loadUser(activeCall); - startCall(); + startCall(); initCall(activeCall); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 87bb7338b9..18cfd93253 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -125,8 +125,8 @@ Switch Camera Accept Decline - Incoming voice call… - Incoming video call… + Incoming Voice Call… + Incoming Video Call… Voice call - %1$s Connecting… Ringing… -- GitLab