| /* |
| * Copyright (C) 2018 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 |
| */ |
| |
| package com.android.incallui.rtt.impl; |
| |
| import android.content.Context; |
| import android.telecom.CallAudioState; |
| import android.view.View; |
| import android.widget.PopupWindow; |
| import com.android.incallui.incall.protocol.InCallButtonUiDelegate; |
| import com.android.incallui.incall.protocol.InCallScreenDelegate; |
| import com.android.incallui.rtt.impl.RttCheckableButton.OnCheckedChangeListener; |
| import com.android.incallui.speakerbuttonlogic.SpeakerButtonInfo; |
| |
| /** Overflow menu for RTT call. */ |
| public class RttOverflowMenu extends PopupWindow implements OnCheckedChangeListener { |
| |
| private final RttCheckableButton muteButton; |
| private final RttCheckableButton speakerButton; |
| private final RttCheckableButton dialpadButton; |
| private final RttCheckableButton addCallButton; |
| private final RttCheckableButton swapCallButton; |
| private final InCallButtonUiDelegate inCallButtonUiDelegate; |
| private final InCallScreenDelegate inCallScreenDelegate; |
| private boolean isSwitchToSecondaryButtonEnabled; |
| private boolean isSwapCallButtonEnabled; |
| |
| RttOverflowMenu( |
| Context context, |
| InCallButtonUiDelegate inCallButtonUiDelegate, |
| InCallScreenDelegate inCallScreenDelegate) { |
| super(context, null, 0, R.style.OverflowMenu); |
| this.inCallButtonUiDelegate = inCallButtonUiDelegate; |
| this.inCallScreenDelegate = inCallScreenDelegate; |
| View view = View.inflate(context, R.layout.overflow_menu, null); |
| setContentView(view); |
| setOnDismissListener(this::dismiss); |
| setFocusable(true); |
| setWidth(context.getResources().getDimensionPixelSize(R.dimen.rtt_overflow_menu_width)); |
| muteButton = view.findViewById(R.id.menu_mute); |
| muteButton.setOnCheckedChangeListener(this); |
| speakerButton = view.findViewById(R.id.menu_speaker); |
| speakerButton.setOnCheckedChangeListener(this); |
| dialpadButton = view.findViewById(R.id.menu_keypad); |
| dialpadButton.setOnCheckedChangeListener(this); |
| addCallButton = view.findViewById(R.id.menu_add_call); |
| addCallButton.setOnClickListener(v -> this.inCallButtonUiDelegate.addCallClicked()); |
| swapCallButton = view.findViewById(R.id.menu_swap_call); |
| swapCallButton.setOnClickListener( |
| v -> { |
| if (isSwapCallButtonEnabled) { |
| this.inCallButtonUiDelegate.swapClicked(); |
| } |
| if (isSwitchToSecondaryButtonEnabled) { |
| this.inCallScreenDelegate.onSecondaryInfoClicked(); |
| } |
| }); |
| } |
| |
| @Override |
| public void onCheckedChanged(RttCheckableButton button, boolean isChecked) { |
| if (button == muteButton) { |
| inCallButtonUiDelegate.muteClicked(isChecked, true); |
| } else if (button == speakerButton) { |
| inCallButtonUiDelegate.toggleSpeakerphone(); |
| } else if (button == dialpadButton) { |
| inCallButtonUiDelegate.showDialpadClicked(isChecked); |
| } |
| } |
| |
| void setMuteButtonChecked(boolean isChecked) { |
| muteButton.setChecked(isChecked); |
| } |
| |
| void setAudioState(CallAudioState audioState) { |
| SpeakerButtonInfo info = new SpeakerButtonInfo(audioState); |
| if (info.nonBluetoothMode) { |
| speakerButton.setChecked(info.isChecked); |
| speakerButton.setOnClickListener(null); |
| speakerButton.setOnCheckedChangeListener(this); |
| } else { |
| speakerButton.setText(info.label); |
| speakerButton.setCompoundDrawablesWithIntrinsicBounds(info.icon, 0, 0, 0); |
| speakerButton.setOnClickListener( |
| v -> { |
| inCallButtonUiDelegate.showAudioRouteSelector(); |
| dismiss(); |
| }); |
| speakerButton.setOnCheckedChangeListener(null); |
| } |
| } |
| |
| void setDialpadButtonChecked(boolean isChecked) { |
| dialpadButton.setChecked(isChecked); |
| } |
| |
| void enableSwapCallButton(boolean enabled) { |
| isSwapCallButtonEnabled = enabled; |
| swapCallButton.setVisibility( |
| isSwapCallButtonEnabled || isSwitchToSecondaryButtonEnabled ? View.VISIBLE : View.GONE); |
| } |
| |
| void enableSwitchToSecondaryButton(boolean enabled) { |
| isSwitchToSecondaryButtonEnabled = enabled; |
| swapCallButton.setVisibility( |
| isSwapCallButtonEnabled || isSwitchToSecondaryButtonEnabled ? View.VISIBLE : View.GONE); |
| } |
| } |