diff options
Diffstat (limited to 'InCallUI/src/com/android/incallui/CallButtonPresenter.java')
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonPresenter.java | 100 |
1 files changed, 70 insertions, 30 deletions
diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java index 9fedc95b1..4e840be9f 100644 --- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java +++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java @@ -16,6 +16,7 @@ package com.android.incallui; +import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.telecom.AudioState; @@ -23,6 +24,7 @@ import android.telecom.InCallService.VideoCall; import android.telecom.VideoProfile; import com.android.incallui.AudioModeProvider.AudioModeListener; +import com.android.incallui.InCallCameraManager.Listener; import com.android.incallui.InCallPresenter.CanAddCallListener; import com.android.incallui.InCallPresenter.InCallState; import com.android.incallui.InCallPresenter.InCallStateListener; @@ -36,7 +38,7 @@ import java.util.Objects; */ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButtonUi> implements InCallStateListener, AudioModeListener, IncomingCallListener, - InCallDetailsListener, CanAddCallListener { + InCallDetailsListener, CanAddCallListener, Listener { private static final String KEY_AUTOMATICALLY_MUTED = "incall_key_automatically_muted"; private static final String KEY_PREVIOUS_MUTE_STATE = "incall_key_previous_mute_state"; @@ -44,6 +46,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto private Call mCall; private boolean mAutomaticallyMuted = false; private boolean mPreviousMuteState = false; + private static final int BUTTON_THRESOLD_TO_DISPLAY_OVERFLOW_MENU = 5; public CallButtonPresenter() { } @@ -59,6 +62,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto InCallPresenter.getInstance().addIncomingCallListener(this); InCallPresenter.getInstance().addDetailsListener(this); InCallPresenter.getInstance().addCanAddCallListener(this); + InCallPresenter.getInstance().getInCallCameraManager().addCameraSelectionListener(this); } @Override @@ -69,6 +73,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto AudioModeProvider.getInstance().removeListener(this); InCallPresenter.getInstance().removeIncomingCallListener(this); InCallPresenter.getInstance().removeDetailsListener(this); + InCallPresenter.getInstance().getInCallCameraManager().removeCameraSelectionListener(this); } @Override @@ -248,16 +253,21 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto getUi().displayDialpad(checked /* show */, true /* animate */); } - public void changeToVideoClicked() { + public void displayModifyCallOptions() { + getUi().displayModifyCallOptions(); + } + + public int getCurrentVideoState() { + return mCall.getVideoState(); + } + + public void changeToVideoClicked(VideoProfile videoProfile) { VideoCall videoCall = mCall.getVideoCall(); if (videoCall == null) { return; } - VideoProfile videoProfile = - new VideoProfile(VideoProfile.VideoState.BIDIRECTIONAL); videoCall.sendSessionModifyRequest(videoProfile); - mCall.setSessionModificationState(Call.SessionModificationState.WAITING_FOR_RESPONSE); } @@ -277,12 +287,16 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto String cameraId = cameraManager.getActiveCameraId(); if (cameraId != null) { + final int cameraDir = cameraManager.isUsingFrontFacingCamera() + ? Call.VideoSettings.CAMERA_DIRECTION_FRONT_FACING + : Call.VideoSettings.CAMERA_DIRECTION_BACK_FACING; + mCall.getVideoSettings().setCameraDir(cameraDir); videoCall.setCamera(cameraId); videoCall.requestCameraCapabilities(); } - getUi().setSwitchCameraButton(!useFrontFacingCamera); } + /** * Stop or start client's video transmission. * @param pause True if pausing the local user's video, or false if starting the local user's @@ -331,6 +345,10 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto ui.enableMute(call.can(android.telecom.Call.Details.CAPABILITY_MUTE)); } + private static int toInteger(boolean b) { + return b ? 1 : 0; + } + /** * Updates the buttons applicable for the UI. * @@ -338,29 +356,17 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto * @param context The context. */ private void updateCallButtons(Call call, Context context) { - if (call.isVideoCall(context)) { + if (CallUtils.isVideoCall(call)) { updateVideoCallButtons(call); - } else { - updateVoiceCallButtons(call); } + updateVoiceCallButtons(call); } private void updateVideoCallButtons(Call call) { Log.v(this, "Showing buttons for video call."); final CallButtonUi ui = getUi(); - // Hide all voice-call-related buttons. - ui.showAudioButton(false); - ui.showDialpadButton(false); - ui.showHoldButton(false); - ui.showSwapButton(false); - ui.showChangeToVideoButton(false); - ui.showAddCallButton(false); - ui.showMergeButton(false); - ui.showOverflowButton(false); - // Show all video-call-related buttons. - ui.showChangeToVoiceButton(true); ui.showSwitchCameraButton(true); ui.showPauseVideoButton(true); @@ -392,6 +398,10 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto android.telecom.Call.Details.CAPABILITY_SWAP_CONFERENCE)); Log.v(this, "Show add call ", TelecomAdapter.getInstance().canAddCall()); Log.v(this, "Show mute ", call.can(android.telecom.Call.Details.CAPABILITY_MUTE)); + Log.v(this, "Show video call local:", + call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL) + + " remote: " + + call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE)); final boolean canAdd = TelecomAdapter.getInstance().canAddCall(); final boolean enableHoldOption = call.can(android.telecom.Call.Details.CAPABILITY_HOLD); @@ -401,11 +411,13 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto boolean canVideoCall = call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL) && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE); ui.showChangeToVideoButton(canVideoCall); - ui.enableChangeToVideoButton(!isCallOnHold); final boolean showMergeOption = call.can( android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE); final boolean showAddCallOption = canAdd; + final boolean showManageVideoCallConferenceOption = call.can( + android.telecom.Call.Details.CAPABILITY_MANAGE_CONFERENCE) + && CallUtils.isVideoCall(call); // Show either HOLD or SWAP, but not both. If neither HOLD or SWAP is available: // (1) If the device normally can hold, show HOLD in a disabled state. @@ -415,38 +427,55 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto final boolean showHoldOption = !showSwapOption && (enableHoldOption || supportHold); ui.setHold(isCallOnHold); - // If we show video upgrade and add/merge and hold/swap, the overflow menu is needed. - final boolean isVideoOverflowScenario = canVideoCall - && (showAddCallOption || showMergeOption) && (showHoldOption || showSwapOption); - // If we show hold/swap, add, and merge simultaneously, the overflow menu is needed. - final boolean isOverflowScenario = - (showHoldOption || showSwapOption) && showMergeOption && showAddCallOption; + //Initialize buttonCount = 2. Because speaker and dialpad these two always show in Call UI. + int buttonCount = 2; + buttonCount += toInteger(canVideoCall); + buttonCount += toInteger(showAddCallOption); + buttonCount += toInteger(showMergeOption); + buttonCount += toInteger(showHoldOption); + buttonCount += toInteger(showSwapOption); + buttonCount += toInteger(call.can(android.telecom.Call.Details.CAPABILITY_MUTE)); + buttonCount += toInteger(showManageVideoCallConferenceOption); + + Log.v(this, "show ManageVideoCallConference: " + showManageVideoCallConferenceOption); + Log.v(this, "No of InCall buttons: " + buttonCount + " canVideoCall: " + canVideoCall); + + // Show overflow menu if number of buttons is greater than 5. + final boolean showOverflowMenu = + buttonCount > BUTTON_THRESOLD_TO_DISPLAY_OVERFLOW_MENU; + final boolean isVideoOverflowScenario = canVideoCall && showOverflowMenu; + final boolean isOverflowScenario = !canVideoCall && showOverflowMenu; if (isVideoOverflowScenario) { ui.showHoldButton(false); ui.showSwapButton(false); ui.showAddCallButton(false); ui.showMergeButton(false); + ui.showManageConferenceVideoCallButton(false); ui.configureOverflowMenu( showMergeOption, showAddCallOption /* showAddMenuOption */, showHoldOption && enableHoldOption /* showHoldMenuOption */, - showSwapOption); + showSwapOption, + showManageVideoCallConferenceOption); ui.showOverflowButton(true); } else { if (isOverflowScenario) { ui.showAddCallButton(false); ui.showMergeButton(false); + ui.showManageConferenceVideoCallButton(false); ui.configureOverflowMenu( showMergeOption, showAddCallOption /* showAddMenuOption */, false /* showHoldMenuOption */, - false /* showSwapMenuOption */); + false /* showSwapMenuOption */, + showManageVideoCallConferenceOption); } else { ui.showMergeButton(showMergeOption); ui.showAddCallButton(showAddCallOption); + ui.showManageConferenceVideoCallButton(showManageVideoCallConferenceOption); } ui.showOverflowButton(isOverflowScenario); @@ -500,16 +529,27 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto void showSwitchCameraButton(boolean show); void setSwitchCameraButton(boolean isBackFacingCamera); void showAddCallButton(boolean show); + void showManageConferenceVideoCallButton(boolean show); void showMergeButton(boolean show); void showPauseVideoButton(boolean show); void setPauseVideoButton(boolean isPaused); void showOverflowButton(boolean show); void displayDialpad(boolean on, boolean animate); + void displayModifyCallOptions(); boolean isDialpadVisible(); void setAudio(int mode); void setSupportedAudio(int mask); void configureOverflowMenu(boolean showMergeMenuOption, boolean showAddMenuOption, - boolean showHoldMenuOption, boolean showSwapMenuOption); + boolean showHoldMenuOption, boolean showSwapMenuOption, + boolean showManageConferenceVideoCallOption); Context getContext(); } + + @Override + public void onActiveCameraSelectionChanged(boolean isUsingFrontFacingCamera) { + if (getUi() == null) { + return; + } + getUi().setSwitchCameraButton(!isUsingFrontFacingCamera); + } } |