Merge "Use UUIDs for call management in Headset Client (HF)"

This commit is contained in:
Sanket Agarwal
2016-10-28 20:01:58 +00:00
committed by Gerrit Code Review
3 changed files with 28 additions and 63 deletions

View File

@@ -27,6 +27,7 @@ import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* Public API to control Hands Free Profile (HFP role only).
@@ -799,7 +800,9 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
* Works only when Extended Call Control is supported by Audio Gateway.
*
* @param device remote device
* @param index index of the call to be terminated
* @param call Handle of call obtained in {@link dial()} or obtained via
* {@link ACTION_CALL_CHANGED}. {@code call} may be null in which
* case we will hangup all active calls.
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_CALL_CHANGED}
@@ -809,12 +812,12 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
* {@link #EXTRA_AG_FEATURE_ECC}.
* This method invocation will fail silently when feature is not supported.</p>
*/
public boolean terminateCall(BluetoothDevice device, int index) {
public boolean terminateCall(BluetoothDevice device, BluetoothHeadsetClientCall call) {
if (DBG) log("terminateCall()");
if (mService != null && isEnabled() &&
isValidDevice(device)) {
try {
return mService.terminateCall(device, index);
return mService.terminateCall(device, call);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
@@ -882,42 +885,19 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
return false;
}
/**
* Redials last number from Audio Gateway.
*
* @param device remote device
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_CALL_CHANGED}
* intent in case of success; {@link #ACTION_RESULT} is sent
* otherwise;
*/
public boolean redial(BluetoothDevice device) {
if (DBG) log("redial()");
if (mService != null && isEnabled() &&
isValidDevice(device)) {
try {
return mService.redial(device);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
}
if (mService == null) Log.w(TAG, "Proxy not attached to service");
return false;
}
/**
* Places a call with specified number.
*
* @param device remote device
* @param number valid phone number
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_CALL_CHANGED}
* intent in case of success; {@link #ACTION_RESULT} is sent
* otherwise;
* @return <code>{@link BluetoothHeadsetClientCall} call</code> if command has been
* issued successfully;
* <code>{@link null}</code> otherwise;
* upon completion HFP sends {@link #ACTION_CALL_CHANGED}
* intent in case of success; {@link #ACTION_RESULT} is sent
* otherwise;
*/
public boolean dial(BluetoothDevice device, String number) {
public BluetoothHeadsetClientCall dial(BluetoothDevice device, String number) {
if (DBG) log("dial()");
if (mService != null && isEnabled() &&
isValidDevice(device)) {
@@ -928,32 +908,7 @@ public final class BluetoothHeadsetClient implements BluetoothProfile {
}
}
if (mService == null) Log.w(TAG, "Proxy not attached to service");
return false;
}
/**
* Places a call to the number under specified memory location.
*
* @param device remote device
* @param location valid memory location
* @return <code>true</code> if command has been issued successfully;
* <code>false</code> otherwise;
* upon completion HFP sends {@link #ACTION_CALL_CHANGED}
* intent in case of success; {@link #ACTION_RESULT} is sent
* otherwise;
*/
public boolean dialMemory(BluetoothDevice device, int location) {
if (DBG) log("dialMemory()");
if (mService != null && isEnabled() &&
isValidDevice(device)) {
try {
return mService.dialMemory(device, location);
} catch (RemoteException e) {
Log.e(TAG, Log.getStackTraceString(new Throwable()));
}
}
if (mService == null) Log.w(TAG, "Proxy not attached to service");
return false;
return null;
}
/**

View File

@@ -18,6 +18,7 @@ package android.bluetooth;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import java.util.UUID;
@@ -70,6 +71,7 @@ public final class BluetoothHeadsetClientCall implements Parcelable {
private boolean mMultiParty;
private final boolean mOutgoing;
private final UUID mUUID;
private final long mCreationElapsedMilli;
/**
* Creates BluetoothHeadsetClientCall instance.
@@ -88,6 +90,7 @@ public final class BluetoothHeadsetClientCall implements Parcelable {
mNumber = number != null ? number : "";
mMultiParty = multiParty;
mOutgoing = outgoing;
mCreationElapsedMilli = SystemClock.elapsedRealtime();
}
/**
@@ -170,6 +173,15 @@ public final class BluetoothHeadsetClientCall implements Parcelable {
return mNumber;
}
/**
* Gets call's creation time in millis since epoch.
*
* @return long representing the creation time.
*/
public long getCreationElapsedMilli() {
return mCreationElapsedMilli;
}
/**
* Checks if call is an active call in a conference mode (aka multi party).
*

View File

@@ -47,14 +47,12 @@ interface IBluetoothHeadsetClient {
boolean acceptCall(in BluetoothDevice device, int flag);
boolean holdCall(in BluetoothDevice device);
boolean rejectCall(in BluetoothDevice device);
boolean terminateCall(in BluetoothDevice device, int index);
boolean terminateCall(in BluetoothDevice device, in BluetoothHeadsetClientCall call);
boolean enterPrivateMode(in BluetoothDevice device, int index);
boolean explicitCallTransfer(in BluetoothDevice device);
boolean redial(in BluetoothDevice device);
boolean dial(in BluetoothDevice device, String number);
boolean dialMemory(in BluetoothDevice device, int location);
BluetoothHeadsetClientCall dial(in BluetoothDevice device, String number);
boolean sendDTMF(in BluetoothDevice device, byte code);
boolean getLastVoiceTagNumber(in BluetoothDevice device);