summaryrefslogtreecommitdiff
path: root/InCallUI/src/com/android/incallui/CallButtonFragment.java
diff options
context:
space:
mode:
authorAndrew Lee <anwlee@google.com>2014-07-21 10:55:04 -0700
committerAndrew Lee <anwlee@google.com>2014-07-21 17:27:55 -0700
commit8f2424c624956e206883dae7dcc6eae47db437ed (patch)
tree2b9e1e936dae5f43af542aba7f60591654351a16 /InCallUI/src/com/android/incallui/CallButtonFragment.java
parentf6e7ba0ca231fb5373510c6c622674a13e54ff99 (diff)
Implement InCall overflow button.
- If there are more than 5 items (for a specifically identified case) collapse extra menu items into an overflow menu. - Construct/update menu, with appropriate click/dismiss listeners. This will happen every time something with the call buttons is updated, but I thought it was better to continue to track state in the presenter, rather than the fragment. - Add strings for associated menu items. Change-Id: Iaa036de3ed1c9abf16605181590d7241896c941d
Diffstat (limited to 'InCallUI/src/com/android/incallui/CallButtonFragment.java')
-rw-r--r--InCallUI/src/com/android/incallui/CallButtonFragment.java58
1 files changed, 57 insertions, 1 deletions
diff --git a/InCallUI/src/com/android/incallui/CallButtonFragment.java b/InCallUI/src/com/android/incallui/CallButtonFragment.java
index 80119a404..dd8446134 100644
--- a/InCallUI/src/com/android/incallui/CallButtonFragment.java
+++ b/InCallUI/src/com/android/incallui/CallButtonFragment.java
@@ -56,6 +56,7 @@ public class CallButtonFragment
private PopupMenu mAudioModePopup;
private boolean mAudioModePopupVisible;
+ private PopupMenu mOverflowPopup;
private View mExtraRowButton;
private View mManageConferenceButton;
private View mGenericMergeButton;
@@ -190,7 +191,7 @@ public class CallButtonFragment
!mPauseVideoButton.isSelected() /* pause */);
break;
case R.id.overflowButton:
- // TODO: Implement.
+ mOverflowPopup.show();
break;
case R.id.manageConferenceButton:
getPresenter().manageConferenceButtonClicked();
@@ -314,6 +315,61 @@ public class CallButtonFragment
}
@Override
+ public void configureOverflowMenu(boolean showMergeMenuOption, boolean showAddMenuOption,
+ boolean showHoldMenuOption, boolean showSwapMenuOption) {
+ 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());
+ 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;
+ default:
+ Log.wtf(this, "onMenuItemClick: unexpected overflow menu click");
+ break;
+ }
+ 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);
+
+ mOverflowButton.setEnabled(menu.hasVisibleItems());
+ }
+
+ @Override
public void setAudio(int mode) {
updateAudioButtons(getPresenter().getSupportedAudio());
refreshAudioModePopup();