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

Unverified Commit d98788d3 authored by Danny Baumann's avatar Danny Baumann Committed by Michael Bestas
Browse files

Clean up volume boost button logic.

Don't show a pointless toast, and hide the button if the feature is not
supported.

Change-Id: I2e1b9acff7b18ef46aeff0e6863f3413b8e4fe26
parent 6b07c48a
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -167,9 +167,6 @@
    <string name="preference_category_ringtone" msgid="6246687516643676729">"铃声和振动"</string>
    <string name="manageConferenceLabel" msgid="7237614418556336108">"管理电话会议"</string>
    <string name="emergency_call_dialog_number_for_display" msgid="7244995877625769187">"紧急呼救号码"</string>
    <string name="volume_boost_notify_enabled">"开启音量增强"</string>
    <string name="volume_boost_notify_disabled">"关闭音量增强"</string>
    <string name="volume_boost_notify_unavailable">"有线/蓝牙耳机连接时,音效增强不可用。"</string>
    <plurals name="duration_seconds" formatted="false" msgid="2544699588744957418">
      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g></item>
      <item quantity="one">1 秒</item>
+0 −3
Original line number Diff line number Diff line
@@ -451,9 +451,6 @@
        <item>never</item>
    </string-array>

    <string name="volume_boost_notify_enabled">"Volume boost ON."</string>
    <string name="volume_boost_notify_disabled">"Volume boost OFF."</string>
    <string name="volume_boost_notify_unavailable">"Extra volume is not available when Wired/Bluetooth headset is used."</string>
    <!-- Setting option name to pick ringtone (a list dialog comes up). [CHAR LIMIT=30] -->
    <string name="ringtone_title" msgid="5379026328015343686">Phone ringtone</string>

+0 −4
Original line number Diff line number Diff line
@@ -49,10 +49,6 @@ public class AudioModeProvider {
    public void onAudioModeChange(int newMode, boolean muted) {
        if (mAudioMode != newMode) {
            mAudioMode = newMode;
            InCallActivity inCallActivity = InCallPresenter.getInstance().getActivity();
            if (inCallActivity != null && inCallActivity.getCallCardFragment() != null) {
                inCallActivity.getCallCardFragment().updateVbByAudioMode(newMode);
            }
            for (AudioModeListener l : mListeners) {
                l.onAudioMode(mAudioMode);
            }
+22 −115
Original line number Diff line number Diff line
@@ -37,8 +37,6 @@ import android.os.Trace;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.content.ContentResolver;
import android.media.AudioManager;
import android.provider.Settings;
import android.telecom.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.SubscriptionManager;
@@ -47,7 +45,6 @@ import android.text.format.DateUtils;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLayoutChangeListener;
import android.view.ViewGroup;
import android.view.ViewPropertyAnimator;
@@ -66,7 +63,6 @@ import android.widget.TextView;
import android.widget.Toast;

import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
import android.telecom.CallAudioState;

import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
import com.android.contacts.common.widget.FloatingActionButtonController;
@@ -154,9 +150,8 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
    private ViewGroup mPrimaryCallInfo;
    private View mCallButtonsContainer;
    private ImageView mPhotoSmall;
    private ImageButton mVbButton;
    private TextView mRecordingTime;
    private AudioManager mAudioManager;
    private ImageButton mVBButton;

    // Secondary caller info
    private View mSecondaryCallInfo;
@@ -234,8 +229,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
    private static final int TTY_MODE_OFF = 0;
    private static final int TTY_MODE_HCO = 2;

    private static final String VOLUME_BOOST = "volume_boost";

    @Override
    public CallCardPresenter.CallCardUi getUi() {
        return this;
@@ -263,7 +256,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
        if (savedInstanceState != null) {
            mIsDialpadShowing = savedInstanceState.getBoolean(IS_DIALPAD_SHOWING_KEY, false);
        }
        mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
    }

    @Override
@@ -384,9 +376,14 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
        CallRecorder recorder = CallRecorder.getInstance();
        recorder.addRecordingProgressListener(mRecordingProgressListener);

        mVbButton = (ImageButton) view.findViewById(R.id.volumeBoost);
        if (null != mVbButton) {
            mVbButton.setOnClickListener(mVbListener);
        mVBButton = (ImageButton) view.findViewById(R.id.volumeBoost);
        if (mVBButton != null) {
            mVBButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    getPresenter().volumeBoostClicked();
                }
            });
        }
    }

@@ -437,6 +434,19 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
        mContactContext.setVisibility(show ? View.VISIBLE : View.GONE);
    }

    @Override
    public void setVolumeBoostButtonState(boolean visible, boolean on) {
        if (mVBButton == null) {
            return;
        }
        if (visible) {
            mVBButton.setVisibility(View.VISIBLE);
            mVBButton.setBackgroundResource(on ? R.drawable.vb_active : R.drawable.vb_normal);
        } else {
            mVBButton.setVisibility(View.GONE);
        }
    }

    /**
     * Sets the visibility of the primary call card.
     * Ensures that when the primary call card is hidden, the video surface slides over to fill the
@@ -804,8 +814,6 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
                sessionModificationState, disconnectCause, connectionLabel, isGatewayCall, isWifi,
                isConference, isWaitingForRemoteSide, isWorkCall);

        updateVbByCall(state);

        Log.v(this, "setCallState " + callStateLabel.getCallStateLabel());
        Log.v(this, "AutoDismiss " + callStateLabel.isAutoDismissing());
        Log.v(this, "DisconnectCause " + disconnectCause.toString());
@@ -1622,105 +1630,4 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr
            v.setBottom(oldBottom);
        }
    }

    private OnClickListener mVbListener = new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (isVbAvailable()) {
                // Switch Volume Boost status
                setVolumeBoost(!isVolumeBoostOn());
            }

            updateVbButton();
            showVbNotify();
        }
    };

    private boolean isVbAvailable() {
        int mode = AudioModeProvider.getInstance().getAudioMode();
        final Context context = getContext();
        int settingsTtyMode = Settings.Secure.getInt(context.getContentResolver(),
                Settings.Secure.PREFERRED_TTY_MODE,
                TTY_MODE_OFF);

        return (mode == CallAudioState.ROUTE_EARPIECE || mode == CallAudioState.ROUTE_SPEAKER
                || settingsTtyMode == TTY_MODE_HCO);
    }

    private void updateVbButton() {
        if (isVbAvailable()) {
           if (isVolumeBoostOn()) {
               mVbButton.setBackgroundResource(R.drawable.vb_active);
           } else {
               mVbButton.setBackgroundResource(R.drawable.vb_normal);
           }
        } else {
            mVbButton.setBackgroundResource(R.drawable.vb_disable);
        }
    }

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

    private void showVbNotify() {
        Toast vbnotify;
        int resId = R.string.volume_boost_notify_unavailable;

        if (isVbAvailable()) {
            if (isVolumeBoostOn()) {
                resId = R.string.volume_boost_notify_enabled;
            } else {
                resId = R.string.volume_boost_notify_disabled;
            }
        }

        vbnotify = Toast.makeText(getView().getContext(), resId, Toast.LENGTH_SHORT);
        vbnotify.setGravity(Gravity.CENTER, 0, 0);
        vbnotify.show();
    }

    private void updateVbByCall(int state) {
        updateVbButton();

        if (Call.State.ACTIVE == state) {
            mVbButton.setVisibility(View.VISIBLE);
        } else if (Call.State.DISCONNECTED == state) {
            if (!CallList.getInstance().hasLiveCall()
                    && isVolumeBoostOn()) {
                mVbButton.setVisibility(View.GONE);

                setVolumeBoost(false);
            }
        }
    }

    public void updateVbByAudioMode(int newMode) {
        if (!(newMode == CallAudioState.ROUTE_EARPIECE
                || newMode == CallAudioState.ROUTE_BLUETOOTH
                || newMode == CallAudioState.ROUTE_WIRED_HEADSET
                || newMode == CallAudioState.ROUTE_SPEAKER)) {
            return;
        }

        if (mAudioManager != null && isVolumeBoostOn()) {
            setVolumeBoost(false);
        }

        updateVbButton();
    }

    private void setVolumeBoost(boolean on){
        if (on)
            mAudioManager.setParameters(VOLUME_BOOST + "=on");
        else
            mAudioManager.setParameters(VOLUME_BOOST + "=off");
    }

    private boolean isVolumeBoostOn(){

        return mAudioManager.getParameters(VOLUME_BOOST).contains("=on");
    }

}
+88 −5
Original line number Diff line number Diff line
@@ -24,10 +24,13 @@ import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
import android.support.annotation.Nullable;
import android.telecom.Call.Details;
import android.telecom.CallAudioState;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
@@ -48,6 +51,7 @@ import com.android.contacts.common.preference.ContactsPreferences;
import com.android.contacts.common.testing.NeededForTesting;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.R;
import com.android.incallui.AudioModeProvider.AudioModeListener;
import com.android.incallui.Call.State;
import com.android.incallui.ContactInfoCache.ContactCacheEntry;
import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback;
@@ -66,9 +70,10 @@ import static com.android.contacts.common.compat.CallSdkCompat.Details.PROPERTY_
 * <p>
 * This class listens for changes to InCallState and passes it along to the fragment.
 */
public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        implements InCallStateListener, IncomingCallListener, InCallDetailsListener,
        InCallEventListener, CallList.CallUpdateListener, DistanceHelper.Listener {
public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> implements
        InCallStateListener, IncomingCallListener, InCallDetailsListener,
        InCallEventListener, CallList.CallUpdateListener,
        AudioModeListener, DistanceHelper.Listener {

    public interface EmergencyCallListener {
        public void onCallUpdated(BaseFragment fragment, boolean isEmergency);
@@ -82,6 +87,8 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
    private static final int IDP_GSM = 2;
    private static final int IDP_BOTH = 3;

    private static final String VOLUME_BOOST_PARAMETER = "volume_boost";

    private final EmergencyCallListener mEmergencyCallListener =
            ObjectFactory.newEmergencyCallListener();
    private DistanceHelper mDistanceHelper;
@@ -92,6 +99,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
    private ContactCacheEntry mSecondaryContactInfo;
    private CallTimer mCallTimer;
    private Context mContext;
    private AudioManager mAudioManager;
    @Nullable private ContactsPreferences mContactsPreferences;
    private boolean mSpinnerShowing = false;
    private boolean mHasShownToast = false;
@@ -156,6 +164,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>

    public void init(Context context, Call call) {
        mContext = Preconditions.checkNotNull(context);
        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        mDistanceHelper = ObjectFactory.newDistanceHelper(mContext, this);
        mContactsPreferences = ContactsPreferencesFactory.newContactsPreferences(mContext);

@@ -199,6 +208,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        InCallPresenter.getInstance().addIncomingCallListener(this);
        InCallPresenter.getInstance().addDetailsListener(this);
        InCallPresenter.getInstance().addInCallEventListener(this);
        AudioModeProvider.getInstance().addListener(this);
    }

    @Override
@@ -210,6 +220,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        InCallPresenter.getInstance().removeIncomingCallListener(this);
        InCallPresenter.getInstance().removeDetailsListener(this);
        InCallPresenter.getInstance().removeInCallEventListener(this);
        AudioModeProvider.getInstance().removeListener(this);
        if (mPrimary != null) {
            CallList.getInstance().removeCallUpdateListener(mPrimary.getId(), this);
        }
@@ -353,6 +364,11 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
            getUi().showHdAudioIndicator(false);
        }

        if (!callList.hasAnyLiveCall() && isVolumeBoostEnabled()) {
            setVolumeBoost(false);
        }
        updateVBButton();

        maybeShowManageConferenceCallButton();

        // Hide the end call button instantly if we're receiving an incoming call.
@@ -424,6 +440,30 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        updatePrimaryDisplayInfo();
    }

    @Override
    public void onAudioMode(int mode) {
        if (mAudioManager == null) {
            return;
        }
        if (mode == CallAudioState.ROUTE_EARPIECE
                || mode == CallAudioState.ROUTE_BLUETOOTH
                || mode == CallAudioState.ROUTE_WIRED_HEADSET
                || mode == CallAudioState.ROUTE_SPEAKER) {
            setVolumeBoost(false);
            updateVBButton();
        }
    }

    @Override
    public void onSupportedAudioMode(int mask) {
        // ignored
    }

    @Override
    public void onMute(boolean muted) {
        // ignored
    }

    private static boolean isForwarded(Call call) {
        return call != null && call.isForwarded();
    }
@@ -1141,6 +1181,49 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        TelecomAdapter.getInstance().disconnectCall(callId);
    }

    public void volumeBoostClicked() {
        if (isVBAvailable()) {
            setVolumeBoost(!isVolumeBoostEnabled());
        }

        updateVBButton();
    }

    private boolean isVBAvailable() {
        if (mPrimary == null || mPrimary.getState() != Call.State.ACTIVE) {
            return false;
        }

        int mode = AudioModeProvider.getInstance().getAudioMode();
        int settingsTtyMode = Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF);

        if (mode != CallAudioState.ROUTE_EARPIECE
                && mode != CallAudioState.ROUTE_SPEAKER
                && settingsTtyMode != TelecomManager.TTY_MODE_HCO) {
            return false;
        }

        return !TextUtils.isEmpty(mAudioManager.getParameters(VOLUME_BOOST_PARAMETER));
    }

    private boolean isVolumeBoostEnabled() {
        return mAudioManager.getParameters(VOLUME_BOOST_PARAMETER).contains("=on");
    }

    private void setVolumeBoost(boolean on) {
        final String value = on ? "=on" : "=off";
        mAudioManager.setParameters(VOLUME_BOOST_PARAMETER + value);
    }

    private void updateVBButton() {
        boolean show = !mIsFullscreen && isVBAvailable();
        boolean on = show && isVolumeBoostEnabled();
        if (getUi() != null) {
            getUi().setVolumeBoostButtonState(show, on);
        }
    }

    private String getNumberFromHandle(Uri handle) {
        return handle == null ? "" : handle.getSchemeSpecificPart();
    }
@@ -1163,7 +1246,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        ui.setEndCallButtonEnabled(!isFullscreenMode &&
                shouldShowEndCallButton(mPrimary, callState),
                callState != Call.State.INCOMING /* animate */);
        ui.showVbButton(!isFullscreenMode);
        updateVBButton();
        maybeShowManageConferenceCallButton();
    }

@@ -1304,6 +1387,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        void setCallbackNumber(String number, boolean isEmergencyCalls);
        void setCallSubject(String callSubject);
        void setProgressSpinnerVisible(boolean visible);
        void setVolumeBoostButtonState(boolean visible, boolean on);
        void showHdAudioIndicator(boolean visible);
        void showForwardIndicator(boolean visible);
        void showManageConferenceCallButton(boolean visible);
@@ -1312,6 +1396,5 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi>
        void animateForNewOutgoingCall();
        void sendAccessibilityAnnouncement();
        void showNoteSentToast();
        void showVbButton(boolean show);
    }
}