Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c94e7eb3 authored by Yorke Lee's avatar Yorke Lee Committed by Android Partner Code Review
Browse files

Merge "Initial refactoring for call buttons" into m-wireless-dev

parents fdf53779 e700d3a3
Loading
Loading
Loading
Loading
+70 −85
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.incallui;

import static com.android.incallui.CallButtonFragment.Buttons.*;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -44,7 +46,6 @@ import android.widget.Toast;
import android.widget.PopupMenu.OnDismissListener;
import android.widget.PopupMenu.OnMenuItemClickListener;

import com.android.contacts.common.util.MaterialColorMapUtils;
import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import java.util.ArrayList;

@@ -55,8 +56,26 @@ public class CallButtonFragment
        extends BaseFragment<CallButtonPresenter, CallButtonPresenter.CallButtonUi>
        implements CallButtonPresenter.CallButtonUi, OnMenuItemClickListener, OnDismissListener,
        View.OnClickListener {
    private CompoundButton mAudioButton;
    private static final int INVALID_INDEX = -1;

    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;
    }


    private CompoundButton mAudioButton;
    private ImageButton mChangeToVoiceButton;
    private CompoundButton mMuteButton;
    private CompoundButton mShowDialpadButton;
@@ -157,7 +176,6 @@ public class CallButtonFragment
        int id = view.getId();
        Log.d(this, "onClick(View " + view + ", id " + id + ")...");

        boolean isClickHandled = true;
        switch(id) {
            case R.id.audioButton:
                onAudioButtonClicked();
@@ -206,17 +224,14 @@ public class CallButtonFragment
                onManageVideoCallConferenceClicked();
                break;
            default:
                isClickHandled = false;
                Log.wtf(this, "onClick: unexpected");
                break;
                return;
        }

        if (isClickHandled) {
        view.performHapticFeedback(
                HapticFeedbackConstants.VIRTUAL_KEY,
                HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
    }
    }

    public void updateColors() {
        MaterialPalette themeColors = InCallPresenter.getInstance().getThemeColors();
@@ -355,23 +370,53 @@ public class CallButtonFragment
    }

    @Override
    public void showAudioButton(boolean show) {
        mAudioButton.setVisibility(show ? View.VISIBLE : View.GONE);
    public void showButton(int buttonId, boolean show) {
        final View button = getButtonById(buttonId);
        if (button != null) {
            button.setVisibility(show ? View.VISIBLE : View.GONE);
        }

    @Override
    public void showChangeToVoiceButton(boolean show) {
        mChangeToVoiceButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void enableMute(boolean enabled) {
        mMuteButton.setEnabled(enabled);
    public void enableButton(int buttonId, boolean enable) {
        final View button = getButtonById(buttonId);
        if (button != null) {
            button.setEnabled(enable);
        }
    }

    @Override
    public void showDialpadButton(boolean show) {
        mShowDialpadButton.setVisibility(show ? View.VISIBLE : View.GONE);
    private View getButtonById(int id) {
        switch (id) {
            case BUTTON_AUDIO:
                return mAudioButton;
            case BUTTON_DOWNGRADE_TO_VOICE:
                return mChangeToVoiceButton;
            case BUTTON_MUTE:
                return mMuteButton;
            case BUTTON_DIALPAD:
                return mShowDialpadButton;
            case BUTTON_HOLD:
                return mHoldButton;
            case BUTTON_SWAP:
                return mSwapButton;
            case BUTTON_UPGRADE_TO_VIDEO:
                return mChangeToVideoButton;
            case BUTTON_SWITCH_CAMERA:
                return mSwitchCameraButton;
            case BUTTON_ADD_CALL:
                return mAddCallButton;
            case BUTTON_MERGE:
                return mMergeButton;
            case BUTTON_PAUSE_VIDEO:
                return mPauseVideoButton;
            case BUTTON_MANAGE_VIDEO_CONFERENCE:
                return mManageVideoCallConferenceButton;
            case BUTTON_OVERFLOW:
                return mOverflowButton;
            default:
                Log.w(this, "Invalid button id");
                return null;
        }
    }

    @Override
@@ -382,75 +427,15 @@ public class CallButtonFragment
    }

    @Override
    public void showHoldButton(boolean show) {
        mHoldButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void enableHold(boolean enabled) {
        mHoldButton.setEnabled(enabled);
    }

    @Override
    public void showSwapButton(boolean show) {
        mSwapButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void showChangeToVideoButton(boolean show) {
        mChangeToVideoButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void enableChangeToVideoButton(boolean enable) {
        mChangeToVideoButton.setEnabled(enable);
    }

    @Override
    public void showSwitchCameraButton(boolean show) {
        mSwitchCameraButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void setSwitchCameraButton(boolean isBackFacingCamera) {
    public void setCameraSwitched(boolean isBackFacingCamera) {
        mSwitchCameraButton.setSelected(isBackFacingCamera);
    }

    @Override
    public void showAddCallButton(boolean show) {
        Log.d(this, "show Add call button: " + show);
        mAddCallButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    public void showManageConferenceVideoCallButton(boolean show) {
        mManageVideoCallConferenceButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void showMergeButton(boolean show) {
        mMergeButton.setVisibility(show ? View.VISIBLE : View.GONE);

        // If the merge button was disabled, re-enable it when hiding it.
        if (!show) {
            mMergeButton.setEnabled(true);
        }
    }

    @Override
    public void showPauseVideoButton(boolean show) {
        mPauseVideoButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void setPauseVideoButton(boolean isPaused) {
    public void setVideoPaused(boolean isPaused) {
        mPauseVideoButton.setSelected(isPaused);
    }

    @Override
    public void showOverflowButton(boolean show) {
        mOverflowButton.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    /**The function is called when Modify Call button gets pressed. The function creates and
     * displays modify call options.
     */
+37 −48
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.incallui;

import static com.android.incallui.CallButtonFragment.Buttons.*;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
@@ -321,7 +323,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
                    mCall.getVideoState() & ~VideoProfile.VideoState.PAUSED);
            videoCall.sendSessionModifyRequest(videoProfile);
        }
        getUi().setPauseVideoButton(pause);
        getUi().setVideoPaused(pause);
    }

    private void updateUi(InCallState state, Call call) {
@@ -342,7 +344,7 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto

        updateCallButtons(call, ui.getContext());

        ui.enableMute(call.can(android.telecom.Call.Details.CAPABILITY_MUTE));
        ui.enableButton(BUTTON_MUTE, call.can(android.telecom.Call.Details.CAPABILITY_MUTE));
    }

    private static int toInteger(boolean b) {
@@ -367,13 +369,13 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
        final CallButtonUi ui = getUi();

        // Show all video-call-related buttons.
        ui.showSwitchCameraButton(true);
        ui.showPauseVideoButton(true);
        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.showHoldButton(supportHold);
        ui.enableHold(enableHoldOption);
        ui.showButton(BUTTON_HOLD, supportHold);
        ui.enableButton(BUTTON_HOLD, enableHoldOption);
        ui.setHold(call.getState() == Call.State.ONHOLD);
    }

@@ -382,13 +384,13 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
        final CallButtonUi ui = getUi();

        // Hide all video-call-related buttons.
        ui.showChangeToVoiceButton(false);
        ui.showSwitchCameraButton(false);
        ui.showPauseVideoButton(false);
        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.showAudioButton(true);
        ui.showDialpadButton(true);
        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));
@@ -410,7 +412,7 @@ 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.showButton(BUTTON_UPGRADE_TO_VIDEO, canVideoCall);

        final boolean showMergeOption = call.can(
                android.telecom.Call.Details.CAPABILITY_MERGE_CONFERENCE);
@@ -447,11 +449,11 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
        final boolean isOverflowScenario = !canVideoCall && showOverflowMenu;

        if (isVideoOverflowScenario) {
            ui.showHoldButton(false);
            ui.showSwapButton(false);
            ui.showAddCallButton(false);
            ui.showMergeButton(false);
            ui.showManageConferenceVideoCallButton(false);
            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,
@@ -459,12 +461,12 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
                    showHoldOption && enableHoldOption /* showHoldMenuOption */,
                    showSwapOption,
                    showManageVideoCallConferenceOption);
            ui.showOverflowButton(true);
            ui.showButton(BUTTON_OVERFLOW, true);
        } else {
            if (isOverflowScenario) {
                ui.showAddCallButton(false);
                ui.showMergeButton(false);
                ui.showManageConferenceVideoCallButton(false);
                ui.showButton(BUTTON_ADD_CALL, false);
                ui.showButton(BUTTON_MERGE, false);
                ui.showButton(BUTTON_MANAGE_VIDEO_CONFERENCE, false);

                ui.configureOverflowMenu(
                        showMergeOption,
@@ -473,15 +475,15 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
                        false /* showSwapMenuOption */,
                        showManageVideoCallConferenceOption);
            } else {
                ui.showMergeButton(showMergeOption);
                ui.showAddCallButton(showAddCallOption);
                ui.showManageConferenceVideoCallButton(showManageVideoCallConferenceOption);
                ui.showButton(BUTTON_MERGE, showMergeOption);
                ui.showButton(BUTTON_ADD_CALL, showAddCallOption);
                ui.showButton(BUTTON_MANAGE_VIDEO_CONFERENCE, showManageVideoCallConferenceOption);
            }

            ui.showOverflowButton(isOverflowScenario);
            ui.showHoldButton(showHoldOption);
            ui.enableHold(enableHoldOption);
            ui.showSwapButton(showSwapOption);
            ui.showButton(BUTTON_OVERFLOW, isOverflowScenario);
            ui.showButton(BUTTON_HOLD, showHoldOption);
            ui.enableButton(BUTTON_HOLD, enableHoldOption);
            ui.showButton(BUTTON_SWAP, showSwapOption);
        }
    }

@@ -514,31 +516,18 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
    }

    public interface CallButtonUi extends Ui {
        void showButton(int buttonId, boolean show);
        void enableButton(int buttonId, boolean enable);
        void setEnabled(boolean on);
        void setMute(boolean on);
        void enableMute(boolean enabled);
        void showAudioButton(boolean show);
        void showChangeToVoiceButton(boolean show);
        void showDialpadButton(boolean show);
        void setHold(boolean on);
        void showHoldButton(boolean show);
        void enableHold(boolean enabled);
        void showSwapButton(boolean show);
        void showChangeToVideoButton(boolean show);
        void enableChangeToVideoButton(boolean enable);
        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 setCameraSwitched(boolean isBackFacingCamera);
        void setVideoPaused(boolean isPaused);
        void setAudio(int mode);
        void setSupportedAudio(int mask);
        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 showManageConferenceVideoCallOption);
@@ -550,6 +539,6 @@ public class CallButtonPresenter extends Presenter<CallButtonPresenter.CallButto
        if (getUi() == null) {
            return;
        }
        getUi().setSwitchCameraButton(!isUsingFrontFacingCamera);
        getUi().setCameraSwitched(!isUsingFrontFacingCamera);
    }
}