diff options
Diffstat (limited to 'InCallUI')
-rw-r--r-- | InCallUI/res/layout/call_button_fragment.xml | 12 | ||||
-rw-r--r-- | InCallUI/res/menu/incall_overflow_menu.xml | 36 | ||||
-rw-r--r-- | InCallUI/res/values/strings.xml | 25 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonFragment.java | 178 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallButtonPresenter.java | 166 |
5 files changed, 153 insertions, 264 deletions
diff --git a/InCallUI/res/layout/call_button_fragment.xml b/InCallUI/res/layout/call_button_fragment.xml index 69d0ee3a0..4eac03482 100644 --- a/InCallUI/res/layout/call_button_fragment.xml +++ b/InCallUI/res/layout/call_button_fragment.xml @@ -68,7 +68,8 @@ <ToggleButton android:id="@+id/audioButton" style="@style/InCallCompoundButton" android:background="@drawable/btn_compound_audio" - android:contentDescription="@string/audio_mode_speaker" /> + android:contentDescription="@string/audio_mode_speaker" + android:visibility="gone" /> <!-- "Change to audio call" for video calls. --> <ImageButton android:id="@+id/changeToVoiceButton" @@ -83,7 +84,8 @@ <ToggleButton android:id="@+id/muteButton" style="@style/InCallCompoundButton" android:background="@drawable/btn_compound_mute" - android:contentDescription="@string/onscreenMuteText" /> + android:contentDescription="@string/onscreenMuteText" + android:visibility="gone" /> <!-- CENTER SLOT ======================================================================= --> @@ -91,7 +93,8 @@ <ToggleButton android:id="@+id/dialpadButton" style="@style/InCallCompoundButton" android:background="@drawable/btn_compound_dialpad" - android:contentDescription="@string/onscreenShowDialpadText" /> + android:contentDescription="@string/onscreenShowDialpadText" + android:visibility="gone" /> <!-- MIDDLE RIGHT SLOT ================================================================= --> @@ -102,7 +105,8 @@ <ToggleButton android:id="@+id/holdButton" style="@style/InCallCompoundButton" android:background="@drawable/btn_compound_hold" - android:contentDescription="@string/onscreenHoldText" /> + android:contentDescription="@string/onscreenHoldText_unselected" + android:visibility="gone" /> <!-- "Swap" (or "Manage calls" in some CDMA states) --> <ImageButton android:id="@+id/swapButton" diff --git a/InCallUI/res/menu/incall_overflow_menu.xml b/InCallUI/res/menu/incall_overflow_menu.xml deleted file mode 100644 index 2de858711..000000000 --- a/InCallUI/res/menu/incall_overflow_menu.xml +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2014 The Android Open Source Project - ~ - ~ Licensed under the Apache License, Version 2.0 (the "License"); - ~ you may not use this file except in compliance with the License. - ~ You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, software - ~ distributed under the License is distributed on an "AS IS" BASIS, - ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - ~ See the License for the specific language governing permissions and - ~ limitations under the License - --> - -<menu xmlns:android="http://schemas.android.com/apk/res/android"> - <item android:id="@+id/overflow_merge_menu_item" - android:title="@string/overflowMergeMenuItemText" /> - - <item android:id="@+id/overflow_add_menu_item" - android:title="@string/overflowAddMenuItemText" /> - - <item android:id="@+id/overflow_hold_menu_item" - android:title="@string/overflowHoldMenuItemText" /> - - <item android:id="@+id/overflow_resume_menu_item" - android:title="@string/overflowResumeMenuItemText" /> - - <item android:id="@+id/overflow_swap_menu_item" - android:title="@string/overflowSwapMenuItemText" /> - - <item android:id="@+id/overflow_manage_conference_menu_item" - android:title="@string/overflowManageConferenceMenuItemText" /> -</menu> diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml index 99b8111bb..cfe3d41ab 100644 --- a/InCallUI/res/values/strings.xml +++ b/InCallUI/res/values/strings.xml @@ -255,23 +255,14 @@ to dial using the physical keyboard --> <string name="dialerKeyboardHintText">Use keyboard to dial</string> - <!-- Text for the overflow "Hold call" menu item. --> - <string name="overflowHoldMenuItemText">Hold call</string> - <!-- Text for the overflow "Resume call" menu item. --> - <string name="overflowResumeMenuItemText">Resume call</string> - <!-- Text for the overflow "Add call" menu item. --> - <string name="overflowAddMenuItemText">Add call</string> - <!-- Text for the onscreen "Merge calls" menu item. --> - <string name="overflowMergeMenuItemText">Merge calls</string> - <!-- Text for the onscreen "Swap calls" menu item. --> - <string name="overflowSwapMenuItemText">Swap calls</string> - <!-- Text for the overflow "Manage Conference Video Call" menu item. --> - <string name="overflowManageConferenceMenuItemText">Manage Conference</string> - - <!-- Text for the onscreen "Hold" button --> - <string name="onscreenHoldText">Hold</string> + <!-- Text for the onscreen "Hold" button when it is not selected. Pressing it will put + the call on hold. --> + <string name="onscreenHoldText_unselected">Hold Call</string> + <!-- Text for the onscreen "Hold" button when it is selected. Pressing it will resume + the call from a previously held state. --> + <string name="onscreenHoldText_selected">Resume Call</string> <!-- Text for the onscreen "End call" button --> - <string name="onscreenEndCallText">End</string> + <string name="onscreenEndCallText">End Call</string> <!-- Text for the onscreen "Show Dialpad" button --> <string name="onscreenShowDialpadText">Dialpad</string> <!-- Text for the onscreen "Mute" button --> @@ -456,7 +447,7 @@ <!-- This can be used in any application wanting to disable the text "Emergency number" --> <string name="emergency_call_dialog_number_for_display">Emergency number</string> - <!-- STOPSHIP These strings are for debugging only --> + <!-- STOPSHIP These strings are for debugging only --> <!-- Call substate label --> <string name="call_substate_label" translatable="false">Call substate - \u000a</string> <!-- Call substate label for call resumed --> diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java index a6ea334b3..1e9082791 100644 --- a/InCallUI/src/com/android/incallui/CallButtonFragment.java +++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java @@ -32,6 +32,7 @@ import android.os.Bundle; import android.telecom.AudioState; import android.telecom.TelecomManager; import android.telecom.VideoProfile; +import android.util.SparseIntArray; import android.view.ContextThemeWrapper; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; @@ -57,23 +58,31 @@ public class CallButtonFragment implements CallButtonPresenter.CallButtonUi, OnMenuItemClickListener, OnDismissListener, View.OnClickListener { private static final int INVALID_INDEX = -1; + private static final int BUTTON_MAX_VISIBLE = 5; + // The button is currently visible in the UI + private static final int BUTTON_VISIBLE = 1; + // The button is hidden in the UI + private static final int BUTTON_HIDDEN = 2; + // The button has been collapsed into the overflow menu + private static final int BUTTON_MENU = 3; public interface Buttons { - public static final int BUTTON_AUDIO = 1; - public static final int BUTTON_DOWNGRADE_TO_VOICE = 2; - public static final int BUTTON_MUTE = 3; - public static final int BUTTON_DIALPAD = 4; - public static final int BUTTON_HOLD = 5; - public static final int BUTTON_SWAP = 6; - public static final int BUTTON_UPGRADE_TO_VIDEO = 7; - public static final int BUTTON_SWITCH_CAMERA = 8; - public static final int BUTTON_ADD_CALL = 9; - public static final int BUTTON_MERGE = 10; - public static final int BUTTON_PAUSE_VIDEO = 11; - public static final int BUTTON_MANAGE_VIDEO_CONFERENCE = 12; - public static final int BUTTON_OVERFLOW = 13; - } - + public static final int BUTTON_AUDIO = 0; + public static final int BUTTON_DOWNGRADE_TO_VOICE = 1; + public static final int BUTTON_MUTE = 2; + public static final int BUTTON_DIALPAD = 3; + public static final int BUTTON_HOLD = 4; + public static final int BUTTON_SWAP = 5; + public static final int BUTTON_UPGRADE_TO_VIDEO = 6; + public static final int BUTTON_SWITCH_CAMERA = 7; + public static final int BUTTON_ADD_CALL = 8; + public static final int BUTTON_MERGE = 9; + public static final int BUTTON_PAUSE_VIDEO = 10; + public static final int BUTTON_MANAGE_VIDEO_CONFERENCE = 11; + public static final int BUTTON_COUNT = 12; + } + + private SparseIntArray mButtonVisibilityMap = new SparseIntArray(BUTTON_COUNT); private CompoundButton mAudioButton; private ImageButton mChangeToVoiceButton; @@ -116,6 +125,10 @@ public class CallButtonFragment @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + for (int i = 0; i < BUTTON_COUNT; i++) { + mButtonVisibilityMap.put(i, BUTTON_HIDDEN); + } } @Override @@ -218,7 +231,9 @@ public class CallButtonFragment !mPauseVideoButton.isSelected() /* pause */); break; case R.id.overflowButton: - mOverflowPopup.show(); + if (mOverflowPopup != null) { + mOverflowPopup.show(); + } break; case R.id.manageVideoCallConferenceButton: onManageVideoCallConferenceClicked(); @@ -240,7 +255,6 @@ public class CallButtonFragment return; } - Resources res = getActivity().getResources(); View[] compoundButtons = { mAudioButton, mMuteButton, @@ -363,18 +377,8 @@ public class CallButtonFragment } @Override - public void setMute(boolean value) { - if (mMuteButton.isSelected() != value) { - mMuteButton.setSelected(value); - } - } - - @Override public void showButton(int buttonId, boolean show) { - final View button = getButtonById(buttonId); - if (button != null) { - button.setVisibility(show ? View.VISIBLE : View.GONE); - } + mButtonVisibilityMap.put(buttonId, show ? BUTTON_VISIBLE : BUTTON_HIDDEN); } @Override @@ -411,8 +415,6 @@ public class CallButtonFragment return mPauseVideoButton; case BUTTON_MANAGE_VIDEO_CONFERENCE: return mManageVideoCallConferenceButton; - case BUTTON_OVERFLOW: - return mOverflowButton; default: Log.w(this, "Invalid button id"); return null; @@ -423,6 +425,9 @@ public class CallButtonFragment public void setHold(boolean value) { if (mHoldButton.isSelected() != value) { mHoldButton.setSelected(value); + mHoldButton.setContentDescription(getContext().getString( + value ? R.string.onscreenHoldText_selected + : R.string.onscreenHoldText_unselected)); } } @@ -436,9 +441,17 @@ public class CallButtonFragment mPauseVideoButton.setSelected(isPaused); } + @Override + public void setMute(boolean value) { + if (mMuteButton.isSelected() != value) { + mMuteButton.setSelected(value); + } + } + /**The function is called when Modify Call button gets pressed. The function creates and * displays modify call options. */ + @Override public void displayModifyCallOptions() { CallButtonPresenter.CallButtonUi ui = getUi(); if (ui == null) { @@ -509,65 +522,68 @@ public class CallButtonFragment return ""; } + private void addToOverflowMenu(int id, View button, PopupMenu menu) { + button.setVisibility(View.GONE); + menu.getMenu().add(Menu.NONE, id, Menu.NONE, button.getContentDescription()); + mButtonVisibilityMap.put(id, BUTTON_MENU); + } + + private PopupMenu getPopupMenu() { + return new PopupMenu(new ContextThemeWrapper(getActivity(), R.style.InCallPopupMenuStyle), + mOverflowButton); + } + + /** + * Iterates through the list of buttons and toggles their visibility depending on the + * setting configured by the CallButtonPresenter. If there are more visible buttons than + * the allowed maximum, the excess buttons are collapsed into a single overflow menu. + */ @Override - public void configureOverflowMenu(boolean showMergeMenuOption, boolean showAddMenuOption, - boolean showHoldMenuOption, boolean showSwapMenuOption, - boolean showManageConferenceVideoCallOption) { - if (mOverflowPopup == null) { - final ContextThemeWrapper contextWrapper = new ContextThemeWrapper(getActivity(), - R.style.InCallPopupMenuStyle); - mOverflowPopup = new PopupMenu(contextWrapper, mOverflowButton); - mOverflowPopup.getMenuInflater().inflate(R.menu.incall_overflow_menu, - mOverflowPopup.getMenu()); + public void updateButtonStates() { + View prevVisibleButton = null; + int prevVisibleId = -1; + PopupMenu menu = null; + int visibleCount = 0; + for (int i = 0; i < BUTTON_COUNT; i++) { + final int visibility = mButtonVisibilityMap.get(i); + final View button = getButtonById(i); + if (visibility == BUTTON_VISIBLE) { + visibleCount++; + if (visibleCount <= BUTTON_MAX_VISIBLE) { + button.setVisibility(View.VISIBLE); + prevVisibleButton = button; + prevVisibleId = i; + } else { + if (menu == null) { + menu = getPopupMenu(); + } + // Collapse the current button into the overflow menu. If is the first visible + // button that exceeds the threshold, also collapse the previous visible button + // so that the total number of visible buttons will never exceed the threshold. + if (prevVisibleButton != null) { + addToOverflowMenu(prevVisibleId, prevVisibleButton, menu); + prevVisibleButton = null; + prevVisibleId = -1; + } + addToOverflowMenu(i, button, menu); + } + } else if (visibility == BUTTON_HIDDEN){ + button.setVisibility(View.GONE); + } + } + + mOverflowButton.setVisibility(menu != null ? View.VISIBLE : View.GONE); + if (menu != null) { + mOverflowPopup = menu; mOverflowPopup.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.overflow_merge_menu_item: - getPresenter().mergeClicked(); - break; - case R.id.overflow_add_menu_item: - getPresenter().addCallClicked(); - break; - case R.id.overflow_hold_menu_item: - getPresenter().holdClicked(true /* checked */); - break; - case R.id.overflow_resume_menu_item: - getPresenter().holdClicked(false /* checked */); - break; - case R.id.overflow_swap_menu_item: - getPresenter().addCallClicked(); - break; - case R.id.overflow_manage_conference_menu_item: - onManageVideoCallConferenceClicked(); - break; - default: - Log.wtf(this, "onMenuItemClick: unexpected overflow menu click"); - break; - } + final int id = item.getItemId(); + getButtonById(id).performClick(); return true; } }); - mOverflowPopup.setOnDismissListener(new OnDismissListener() { - @Override - public void onDismiss(PopupMenu popupMenu) { - popupMenu.dismiss(); - } - }); } - - final Menu menu = mOverflowPopup.getMenu(); - menu.findItem(R.id.overflow_merge_menu_item).setVisible(showMergeMenuOption); - menu.findItem(R.id.overflow_add_menu_item).setVisible(showAddMenuOption); - menu.findItem(R.id.overflow_hold_menu_item).setVisible( - showHoldMenuOption && !mHoldButton.isSelected()); - menu.findItem(R.id.overflow_resume_menu_item).setVisible( - showHoldMenuOption && mHoldButton.isSelected()); - menu.findItem(R.id.overflow_swap_menu_item).setVisible(showSwapMenuOption); - menu.findItem(R.id.overflow_manage_conference_menu_item).setVisible( - showManageConferenceVideoCallOption); - - mOverflowButton.setEnabled(menu.hasVisibleItems()); } @Override diff --git a/InCallUI/src/com/android/incallui/CallButtonPresenter.java b/InCallUI/src/com/android/incallui/CallButtonPresenter.java index 0faebfd29..cc13a87ef 100644 --- a/InCallUI/src/com/android/incallui/CallButtonPresenter.java +++ b/InCallUI/src/com/android/incallui/CallButtonPresenter.java @@ -18,7 +18,6 @@ package com.android.incallui; import static com.android.incallui.CallButtonFragment.Buttons.*; -import android.app.AlertDialog; import android.content.Context; import android.os.Bundle; import android.telecom.AudioState; @@ -48,7 +47,6 @@ 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() { } @@ -121,7 +119,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto @Override public void onDetailsChanged(Call call, android.telecom.Call.Details details) { if (getUi() != null && Objects.equals(call, mCall)) { - updateCallButtons(call, getUi().getContext()); + updateButtonsState(call); } } @@ -133,7 +131,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto @Override public void onCanAddCallChanged(boolean canAddCall) { if (getUi() != null && mCall != null) { - updateCallButtons(mCall, getUi().getContext()); + updateButtonsState(mCall); } } @@ -342,7 +340,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto return; } - updateCallButtons(call, ui.getContext()); + updateButtonsState(call); ui.enableButton(BUTTON_MUTE, call.can(android.telecom.Call.Details.CAPABILITY_MUTE)); } @@ -355,136 +353,49 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto * Updates the buttons applicable for the UI. * * @param call The active call. - * @param context The context. */ - private void updateCallButtons(Call call, Context context) { - if (CallUtils.isVideoCall(call)) { - updateVideoCallButtons(call); - } - updateVoiceCallButtons(call); - } - - private void updateVideoCallButtons(Call call) { - Log.v(this, "Showing buttons for video call."); - final CallButtonUi ui = getUi(); - - // Show all video-call-related buttons. - ui.showButton(BUTTON_SWITCH_CAMERA, true); - ui.showButton(BUTTON_PAUSE_VIDEO, true); - - final boolean supportHold = call.can(android.telecom.Call.Details.CAPABILITY_SUPPORT_HOLD); - final boolean enableHoldOption = call.can(android.telecom.Call.Details.CAPABILITY_HOLD); - ui.showButton(BUTTON_HOLD, supportHold); - ui.enableButton(BUTTON_HOLD, enableHoldOption); - ui.setHold(call.getState() == Call.State.ONHOLD); - } - - private void updateVoiceCallButtons(Call call) { + private void updateButtonsState(Call call) { Log.v(this, "Showing buttons for voice call."); final CallButtonUi ui = getUi(); - // Hide all video-call-related buttons. - ui.showButton(BUTTON_DOWNGRADE_TO_VOICE, false); - ui.showButton(BUTTON_SWITCH_CAMERA, false); - ui.showButton(BUTTON_PAUSE_VIDEO, false); - - // Show all voice-call-related buttons. - ui.showButton(BUTTON_AUDIO, true); - ui.showButton(BUTTON_DIALPAD, true); - - Log.v(this, "Show hold ", call.can(android.telecom.Call.Details.CAPABILITY_SUPPORT_HOLD)); - Log.v(this, "Enable hold", call.can(android.telecom.Call.Details.CAPABILITY_HOLD)); - Log.v(this, "Show merge ", call.can( - android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE)); - Log.v(this, "Show swap ", call.can( - 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); - final boolean supportHold = call.can(android.telecom.Call.Details.CAPABILITY_SUPPORT_HOLD); - final boolean isCallOnHold = call.getState() == Call.State.ONHOLD; - - boolean canVideoCall = call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL) - && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE); - ui.showButton(BUTTON_UPGRADE_TO_VIDEO, canVideoCall); - - 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); + final boolean isVideo = CallUtils.isVideoCall(call); + // Common functionality (audio, hold, etc). // 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. // (2) If the device doesn't have the concept of hold/swap, remove the button. - final boolean showSwapOption = call.can( + final boolean showSwap = call.can( android.telecom.Call.Details.CAPABILITY_SWAP_CONFERENCE); - final boolean showHoldOption = !showSwapOption && (enableHoldOption || supportHold); + final boolean showHold = !showSwap + && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORT_HOLD) + && call.can(android.telecom.Call.Details.CAPABILITY_HOLD); + final boolean isCallOnHold = call.getState() == Call.State.ONHOLD; + + final boolean showAddCall = TelecomAdapter.getInstance().canAddCall(); + final boolean showMerge = call.can( + android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE); + final boolean showUpgradeToVideo = !isVideo + && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_LOCAL) + && call.can(android.telecom.Call.Details.CAPABILITY_SUPPORTS_VT_REMOTE); + + final boolean showMute = call.can(android.telecom.Call.Details.CAPABILITY_MUTE); + ui.showButton(BUTTON_AUDIO, true); + ui.showButton(BUTTON_SWAP, showSwap); + ui.showButton(BUTTON_HOLD, showHold); ui.setHold(isCallOnHold); - //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.showButton(BUTTON_HOLD, false); - ui.showButton(BUTTON_SWAP, false); - ui.showButton(BUTTON_ADD_CALL, false); - ui.showButton(BUTTON_MERGE, false); - ui.showButton(BUTTON_MANAGE_VIDEO_CONFERENCE, false); - - ui.configureOverflowMenu( - showMergeOption, - showAddCallOption /* showAddMenuOption */, - showHoldOption && enableHoldOption /* showHoldMenuOption */, - showSwapOption, - showManageVideoCallConferenceOption); - ui.showButton(BUTTON_OVERFLOW, true); - } else { - if (isOverflowScenario) { - ui.showButton(BUTTON_ADD_CALL, false); - ui.showButton(BUTTON_MERGE, false); - ui.showButton(BUTTON_MANAGE_VIDEO_CONFERENCE, false); - - ui.configureOverflowMenu( - showMergeOption, - showAddCallOption /* showAddMenuOption */, - false /* showHoldMenuOption */, - false /* showSwapMenuOption */, - showManageVideoCallConferenceOption); - } else { - ui.showButton(BUTTON_MERGE, showMergeOption); - ui.showButton(BUTTON_ADD_CALL, showAddCallOption); - ui.showButton(BUTTON_MANAGE_VIDEO_CONFERENCE, showManageVideoCallConferenceOption); - } + ui.showButton(BUTTON_MUTE, showMute); + ui.showButton(BUTTON_ADD_CALL, showAddCall); + // TODO: This button is currently being used for both upgrade and downgrade scenarios. + // It should be split into BUTTON_DOWNGRADE_TO_VOICE AND BUTTON_UPGRADE_TO_VIDEO + ui.showButton(BUTTON_UPGRADE_TO_VIDEO, true); + ui.showButton(BUTTON_DOWNGRADE_TO_VOICE, false); + ui.showButton(BUTTON_SWITCH_CAMERA, isVideo); + ui.showButton(BUTTON_PAUSE_VIDEO, isVideo); + ui.showButton(BUTTON_DIALPAD, !isVideo); + ui.showButton(BUTTON_MERGE, showMerge); - ui.showButton(BUTTON_OVERFLOW, isOverflowScenario); - ui.showButton(BUTTON_HOLD, showHoldOption); - ui.enableButton(BUTTON_HOLD, enableHoldOption); - ui.showButton(BUTTON_SWAP, showSwapOption); - } + ui.updateButtonStates(); } public void refreshMuteState() { @@ -528,9 +439,12 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto void displayDialpad(boolean on, boolean animate); void displayModifyCallOptions(); boolean isDialpadVisible(); - void configureOverflowMenu(boolean showMergeMenuOption, boolean showAddMenuOption, - boolean showHoldMenuOption, boolean showSwapMenuOption, - boolean showManageConferenceVideoCallOption); + + /** + * Once showButton() has been called on each of the individual buttons in the UI, call + * this to configure the overflow menu appropriately. + */ + void updateButtonStates(); Context getContext(); } |