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

Commit 1dd1e03f authored by Jack He's avatar Jack He
Browse files

HFP: Allow SCO audio to be forcibly connected

* Normally, Android only allows SCO audio to be connected in several
  allowed cases (e.g. in call, in ringing, in virtual call state, etc)
* Sometimes, it is necessary to force a SCO audio connection (e.g.
  during PTS test)
* This change adds setForceScoAudio(boolean) hidden, system only method
  to allow such behaviour

Bug: 38040125
Test: PTS HFP tests
Change-Id: I28f295c98da5bebb837c2a5423c7acde81af73f7
parent 36fdb346
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -766,6 +766,28 @@ public final class BluetoothHeadset implements BluetoothProfile {
        return false;
    }

    /**
     * Force SCO audio to be opened regardless any other restrictions
     *
     * @param forced Whether or not SCO audio connection should be forced:
     *                 True to force SCO audio
     *                 False to use SCO audio in normal manner
     * @hide
     */
    public void setForceScoAudio(boolean forced) {
        if (VDBG) log("setForceScoAudio " + String.valueOf(forced));
        if (mService != null && isEnabled()) {
            try {
                mService.setForceScoAudio(forced);
            } catch (RemoteException e) {
              Log.e(TAG, e.toString());
            }
        } else {
            Log.w(TAG, "Proxy not attached to service");
            if (DBG) Log.d(TAG, Log.getStackTraceString(new Throwable()));
        }
    }

    /**
     * Check if Bluetooth SCO audio is connected.
     *
+1 −0
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ interface IBluetoothHeadset {
    boolean disconnectAudio();
    void setAudioRouteAllowed(boolean allowed);
    boolean getAudioRouteAllowed();
    void setForceScoAudio(boolean forced);
    boolean startScoUsingVirtualVoiceCall(in BluetoothDevice device);
    boolean stopScoUsingVirtualVoiceCall(in BluetoothDevice device);
    void phoneStateChanged(int numActive, int numHeld, int callState, String number, int type);