2626
2727import android .app .AlertDialog ;
2828import android .app .AppOpsManager ;
29+ import android .app .Notification ;
30+ import android .app .NotificationChannel ;
2931import android .app .NotificationManager ;
3032import android .app .PendingIntent ;
3133import android .app .PictureInPictureParams ;
32- import android .bluetooth .BluetoothDevice ;
33- import android .content .BroadcastReceiver ;
3434import android .content .ComponentName ;
3535import android .content .Context ;
3636import android .content .Intent ;
@@ -275,8 +275,7 @@ public void onLetInClick(ParticipantsAdapter.CallMembershipEntity entity) {
275275 setViewAndChildrenEnabled (layout , false );
276276 ((SurfaceView ) localView ).setZOrderMediaOverlay (true );
277277 ((SurfaceView ) screenShare ).setZOrderMediaOverlay (true );
278- //requirePermission();
279- makeCall ();
278+ requirePermission ();
280279 }
281280 }
282281
@@ -320,6 +319,12 @@ private void requirePermission() {
320319 new RequirePermissionAction (getActivity ()).execute ();
321320 }
322321
322+ @ SuppressWarnings ("unused" )
323+ @ Subscribe (threadMode = ThreadMode .MAIN )
324+ public void onEventMainThread (PermissionAcquiredEvent event ) {
325+ makeCall ();
326+ }
327+
323328 @ Override
324329 public void onStop () {
325330 super .onStop ();
@@ -391,14 +396,28 @@ public void onSwitchCallAbility(Switch s) {
391396 agent .receiveAudio (s .isChecked ());
392397 break ;
393398 case R .id .switchShareContent :
394- if (s .isChecked ())
395- agent .getActiveCall ().startSharing (r -> {
399+ if (s .isChecked ()) {
400+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .O ) {
401+ NotificationChannel mChannel = new NotificationChannel ("screen_share_notification_channel" , "screen_share_notification_channel" , NotificationManager .IMPORTANCE_HIGH );
402+ NotificationManager notifyManager = (NotificationManager ) getContext ().getSystemService (Context .NOTIFICATION_SERVICE );
403+ notifyManager .createNotificationChannel (mChannel );
404+ }
405+ Notification notification = new NotificationCompat .Builder (getActivity (), "screen_share_notification_channel" )
406+ .setSmallIcon (R .mipmap .ic_launcher )
407+ .setContentTitle ("Cisco Kitchensink" )
408+ .setContentText ("Sharing screen to others" )
409+ .setTicker ("Screen Sharing" )
410+ .setPriority (NotificationCompat .PRIORITY_DEFAULT )
411+ .setDefaults (Notification .DEFAULT_SOUND )
412+ .build ();
413+
414+ agent .getActiveCall ().startSharing (notification , 0xabcde , r -> {
396415 Ln .d ("startSharing result: " + r );
397416 if (!r .isSuccessful ()) {
398417 switchShareContent .setChecked (false );
399418 }
400419 });
401- else
420+ } else
402421 agent .getActiveCall ().stopSharing (r -> {
403422 Ln .d ("stopSharing result: " + r );
404423 });
@@ -530,7 +549,7 @@ private void makeCall() {
530549 agent .answer (localView , remoteView , screenShare , false , null );
531550 return ;
532551 }
533-
552+ agent . startPreview ( localView );
534553 agent .dial (callee , localView , remoteView , screenShare , false , null );
535554 new AddCallHistoryAction (callee , "out" ).execute ();
536555 setButtonsEnable (true );
@@ -682,9 +701,9 @@ private void updateParticipants() {
682701 Ln .d ("updateParticipants: " + callMemberships .size ());
683702 for (CallMembership membership : callMemberships ) {
684703 String personId = membership .getPersonId ();
685- if (/*membership.getState() != CallMembership.State.JOINED || */ personId == null || personId .isEmpty () || membership .getEmail () == null || membership .getEmail ().isEmpty ())
704+ if (/*membership.getState() != CallMembership.State.JOINED || */ personId == null || personId .isEmpty () || membership .getDisplayName () == null || membership .getDisplayName ().isEmpty ())
686705 continue ;
687- participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getEmail (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
706+ participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getDisplayName (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
688707 agent .getWebex ().people ().get (personId , r -> {
689708 if (r == null || !r .isSuccessful () || r .getData () == null ) return ;
690709 mIdPersonMap .put (personId , r .getData ());
@@ -699,7 +718,7 @@ private void updatePersonInfoForParticipants(String personId, Person person) {
699718 }
700719
701720 private void updatePersonInfoForActiveSpeaker (String personId , Person person ) {
702- if (participantsAdapter .getActiveSpeaker () == null || personId == null || person == null || !participantsAdapter .getActiveSpeaker ().equals (personId ))
721+ if (participantsAdapter .getActiveSpeaker () == null || person == null || !participantsAdapter .getActiveSpeaker ().equals (personId ))
703722 return ;
704723 String avatar = person .getAvatar ();
705724 if (avatar == null || avatar .isEmpty ()) {
@@ -744,13 +763,22 @@ public void onEventMainThread(OnDisconnectEvent event) {
744763 @ SuppressWarnings ("unused" )
745764 @ Subscribe (threadMode = ThreadMode .MAIN , sticky = true )
746765 public void onEventMainThread (OnMediaChangeEvent event ) {
747- if (event .callEvent instanceof RemoteSendingSharingEvent ) {
766+ if (event .callEvent instanceof CallObserver .RemoteSendingVideoEvent ) {
767+ Ln .d ("RemoteSendingVideoEvent: " + ((CallObserver .RemoteSendingVideoEvent ) event .callEvent ).isSending ());
768+ } else if (event .callEvent instanceof RemoteSendingSharingEvent ) {
748769 Ln .d ("RemoteSendingSharingEvent: " + ((RemoteSendingSharingEvent ) event .callEvent ).isSending ());
770+ if (((RemoteSendingSharingEvent ) event .callEvent ).isSending ()) {
771+ event .callEvent .getCall ().setVideoRenderViews (new Pair <>(localView , screenShare ));
772+ event .callEvent .getCall ().setSharingRenderView (remoteView );
773+ } else {
774+ event .callEvent .getCall ().setSharingRenderView (null );
775+ event .callEvent .getCall ().setVideoRenderViews (new Pair <>(localView , remoteView ));
776+ }
749777 updateScreenShareView ();
750778 } else if (event .callEvent instanceof SendingSharingEvent ) {
751779 Ln .d ("SendingSharingEvent: " + ((SendingSharingEvent ) event .callEvent ).isSending ());
752780 if (((SendingSharingEvent ) event .callEvent ).isSending ()) {
753- sendNotification ();
781+ // sendNotification();
754782 backToHome ();
755783 }
756784 } else if (event .callEvent instanceof CallObserver .ActiveSpeakerChangedEvent ) {
@@ -859,7 +887,7 @@ public void onEventMainThread(OnAuxStreamEvent event) {
859887 Person person = mIdPersonMap .get (personId );
860888 auxStreamViewHolder .viewAvatar .setVisibility (membership .isSendingVideo () ? View .GONE : View .VISIBLE );
861889 if (person == null ) {
862- auxStreamViewHolder .textView .setText (membership .getEmail ());
890+ auxStreamViewHolder .textView .setText (membership .getDisplayName ());
863891 auxStreamViewHolder .viewAvatar .setImageResource (R .drawable .google_contacts_android );
864892 agent .getWebex ().people ().get (personId , r -> {
865893 if (!r .isSuccessful () || r .getData () == null ) return ;
@@ -890,9 +918,9 @@ public void onEventMainThread(OnCallMembershipEvent event) {
890918 String personId = membership .getPersonId ();
891919 if (event .callEvent instanceof CallObserver .MembershipJoinedEvent ) {
892920 Ln .d ("MembershipJoinedEvent: " );
893- if (membership .getState () != CallMembership .State .JOINED || personId == null || personId .isEmpty () || membership .getEmail () == null || membership .getEmail ().isEmpty ())
921+ if (membership .getState () != CallMembership .State .JOINED || personId == null || personId .isEmpty () || membership .getDisplayName () == null || membership .getDisplayName ().isEmpty ())
894922 return ;
895- participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getEmail (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
923+ participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getDisplayName (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
896924 agent .getWebex ().people ().get (personId , r -> {
897925 if (r == null || !r .isSuccessful () || r .getData () == null ) return ;
898926 updatePersonInfoForParticipants (personId , r .getData ());
@@ -932,9 +960,9 @@ public void onEventMainThread(OnCallMembershipEvent event) {
932960 }
933961 } else if (event .callEvent instanceof CallObserver .MembershipWaitingEvent ) {
934962 Ln .d ("MembershipJoinedLobbyEvent: " );
935- if (membership .getState () != CallMembership .State .WAITING || personId == null || personId .isEmpty () || membership .getEmail () == null || membership .getEmail ().isEmpty ())
963+ if (membership .getState () != CallMembership .State .WAITING || personId == null || personId .isEmpty () || membership .getDisplayName () == null || membership .getDisplayName ().isEmpty ())
936964 return ;
937- participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getEmail (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
965+ participantsAdapter .addOrUpdateItem (new ParticipantsAdapter .CallMembershipEntity (personId , membership .getDisplayName (), "" , membership .isSendingAudio (), membership .isSendingVideo (), membership .getState ()));
938966 agent .getWebex ().people ().get (personId , r -> {
939967 if (r == null || !r .isSuccessful () || r .getData () == null ) return ;
940968 Ln .d ("people: " + r .getData ());
@@ -944,18 +972,12 @@ public void onEventMainThread(OnCallMembershipEvent event) {
944972 Ln .d ("MembershipAudioMutedControlledEvent: " );
945973 Ln .d (membership .getPersonId () + (membership .isAudioMutedControlled () ? " muted by " : " unmuted by " ) + membership .audioModifiedBy ());
946974 if (membership .audioModifiedBy () != null ) {
947- String text = membership .getEmail () + (membership .isAudioMutedControlled () ? " muted" : " unmuted" ) + " by others" ;
975+ String text = membership .getDisplayName () + (membership .isAudioMutedControlled () ? " muted" : " unmuted" ) + " by others" ;
948976 toast (text );
949977 }
950978 }
951979 }
952980
953- @ SuppressWarnings ("unused" )
954- @ Subscribe (threadMode = ThreadMode .MAIN )
955- public void onEventMainThread (PermissionAcquiredEvent event ) {
956- makeCall ();
957- }
958-
959981 private void backToHome () {
960982 Intent intent = new Intent (Intent .ACTION_MAIN );
961983 intent .addCategory (Intent .CATEGORY_HOME );
0 commit comments