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

Commit b1fb89c9 authored by Bruno Martins's avatar Bruno Martins
Browse files

Telecomm: Forward port phone_type switch support



* This change is still required for some MSIM devices
* Change is based on the following commits, but with some slight
  simplifications and the necessary changes to adapt to the new code:

	commit e08bab39
	Author: hawst1 <hawst1@gmail.com>
	Date: 2015-11-02 22:39:58 +0700

	    - Fix SIP soft-reboot on call

	    Change-Id: Ic78c52bbbe6b93b78bfdb8fdef479ef93ce1bd9f
	    Signed-off-by: default avatarljzyal <ljzyal@gmail.com>

	commit 9552ca5d
	Author: Bruno Martins <bgcngm@gmail.com>
	Date: 2015-08-20 19:38:07 +0100

	    Telecomm: Avoid NPE when invoking setAudioParameters

	    * This exception would occur when preferred SIM for calls was set to
	      "Ask every time" and if dialog was dismissed before starting the call

	    Change-Id: Iee9968a7ad95fa16a085ecd7e765873904e0b88a

	commit 4c081cb6
	Author: Bruno Martins <bgcngm@gmail.com>
	Date: 2015-08-06 23:26:41 +0100

	    Telecomm: Make phone_type switch generic

	    Change-Id: I78129aaab82493c1107699932f7ae8d780006c8f

	commit 235e20b2
	Author: ljzyal <ljzyal@gmail.com>
	Date:   Mon Jul 20 17:02:50 2015 +0800

	    Telecomm: Support Samsung Dual Sims Phone phone_type switch

	    Change-Id: Id6a91a47a5d9ebbb39869a66c05eeec14e1366e2

Change-Id: I2cdc09c657473163f0dbf6179ac39a92246156c9
parent 1b9a1b41
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -21,7 +21,10 @@ import android.media.AudioManager;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemProperties;
import android.telecom.CallAudioState;
import android.telecom.PhoneAccountHandle;
import android.telephony.SubscriptionManager;

import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
@@ -101,6 +104,11 @@ final class CallAudioManager extends CallsManagerListenerBase
                case MSG_AUDIO_MANAGER_SET_MODE: {
                    int newMode = msg.arg1;
                    int oldMode = mAudioManager.getMode();

                    Call call = mCallsManager.getForegroundCall();
                    boolean setMsimAudioParams = SystemProperties
                            .getBoolean("ro.multisim.set_audio_params", false);

                    Log.v(this, "Request to change audio mode from %s to %s", modeToString(oldMode),
                            modeToString(newMode));

@@ -111,6 +119,17 @@ final class CallAudioManager extends CallsManagerListenerBase
                                    + "  Resetting to NORMAL first.");
                            mAudioManager.setMode(AudioManager.MODE_NORMAL);
                        }

                        if (call != null && setMsimAudioParams
                                && newMode == AudioManager.MODE_IN_CALL) {
                            int phoneId = getPhoneId(call);
                            Log.d(this, "setAudioParameters phoneId=" + phoneId);
                            if (phoneId == 0) {
                                mAudioManager.setParameters("phone_type=cp1");
                            } else if (phoneId == 1) {
                                mAudioManager.setParameters("phone_type=cp2");
                            }
                        }
                        mAudioManager.setMode(newMode);
                        synchronized (mLock) {
                            mMostRecentlyUsedMode = newMode;
@@ -593,6 +612,22 @@ final class CallAudioManager extends CallsManagerListenerBase
        }
    }

    private int getPhoneId(Call call) {
        if (call.getTargetPhoneAccount() != null) {
            PhoneAccountHandle account = call.getTargetPhoneAccount();
            try {
                int index = Integer.parseInt(account.getId());
                int phoneId = SubscriptionManager.getPhoneId(index);
                if (SubscriptionManager.isValidPhoneId(phoneId)) {
                    return phoneId;
                }
            } catch (NumberFormatException e) {
                Log.e(this, e, "Cannot get phoneId from ID value " + account.getId());
            }
        }
        return -1;
    }

    /**
     * Sets the audio mode.
     *