/* * Copyright 2021 HIMSA II K/S - www.himsa.com. * Represented by EHIMA - www.ehima.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.bluetooth; import android.annotation.IntDef; import android.annotation.NonNull; import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Objects; import java.util.UUID; /** * Representation of Call * * @hide */ public final class BluetoothLeCall implements Parcelable { /** @hide */ @IntDef( prefix = "STATE_", value = { STATE_INCOMING, STATE_DIALING, STATE_ALERTING, STATE_ACTIVE, STATE_LOCALLY_HELD, STATE_REMOTELY_HELD, STATE_LOCALLY_AND_REMOTELY_HELD }) @Retention(RetentionPolicy.SOURCE) public @interface State {} /** * A remote party is calling (incoming call). * * @hide */ public static final int STATE_INCOMING = 0x00; /** * The process to call the remote party has started but the remote party is not being alerted * (outgoing call). * * @hide */ public static final int STATE_DIALING = 0x01; /** * A remote party is being alerted (outgoing call). * * @hide */ public static final int STATE_ALERTING = 0x02; /** * The call is in an active conversation. * * @hide */ public static final int STATE_ACTIVE = 0x03; /** * The call is connected but held locally. “Locally Held” implies that either the server or the * client can affect the state. * * @hide */ public static final int STATE_LOCALLY_HELD = 0x04; /** * The call is connected but held remotely. “Remotely Held” means that the state is controlled * by the remote party of a call. * * @hide */ public static final int STATE_REMOTELY_HELD = 0x05; /** * The call is connected but held both locally and remotely. * * @hide */ public static final int STATE_LOCALLY_AND_REMOTELY_HELD = 0x06; /** * Whether the call direction is outgoing. * * @hide */ public static final int FLAG_OUTGOING_CALL = 0x00000001; /** * Whether the call URI and Friendly Name are withheld by server. * * @hide */ public static final int FLAG_WITHHELD_BY_SERVER = 0x00000002; /** * Whether the call URI and Friendly Name are withheld by network. * * @hide */ public static final int FLAG_WITHHELD_BY_NETWORK = 0x00000004; /** Unique UUID that identifies this call */ private UUID mUuid; /** Remote Caller URI */ private String mUri; /** Caller friendly name */ private String mFriendlyName; /** Call state */ private @State int mState; /** Call flags */ private int mCallFlags; /** @hide */ public BluetoothLeCall(@NonNull BluetoothLeCall that) { mUuid = new UUID( that.getUuid().getMostSignificantBits(), that.getUuid().getLeastSignificantBits()); mUri = that.mUri; mFriendlyName = that.mFriendlyName; mState = that.mState; mCallFlags = that.mCallFlags; } /** @hide */ public BluetoothLeCall( @NonNull UUID uuid, @NonNull String uri, @NonNull String friendlyName, @State int state, int callFlags) { mUuid = uuid; mUri = uri; mFriendlyName = friendlyName; mState = state; mCallFlags = callFlags; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; BluetoothLeCall that = (BluetoothLeCall) o; return mUuid.equals(that.mUuid) && mUri.equals(that.mUri) && mFriendlyName.equals(that.mFriendlyName) && mState == that.mState && mCallFlags == that.mCallFlags; } @Override public int hashCode() { return Objects.hash(mUuid, mUri, mFriendlyName, mState, mCallFlags); } /** * Returns a string representation of this BluetoothLeCall. * *
Currently this is the UUID.
*
* @return string representation of this BluetoothLeCall
*/
@Override
public String toString() {
return mUuid.toString();
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel out, int flags) {
out.writeParcelable(new ParcelUuid(mUuid), 0);
out.writeString(mUri);
out.writeString(mFriendlyName);
out.writeInt(mState);
out.writeInt(mCallFlags);
}
public static final @NonNull Creator An UUID is unique identifier of a BluetoothLeCall.
*
* @return UUID of this BluetoothLeCall
* @hide
*/
public @NonNull UUID getUuid() {
return mUuid;
}
/**
* Returns a URI of the remote party of this BluetoothLeCall.
*
* @return string representation of this BluetoothLeCall
* @hide
*/
public @NonNull String getUri() {
return mUri;
}
/**
* Returns a friendly name of the call.
*
* @return friendly name representation of this BluetoothLeCall
* @hide
*/
public @NonNull String getFriendlyName() {
return mFriendlyName;
}
/**
* Returns the call state.
*
* @return the state of this BluetoothLeCall
* @hide
*/
public @State int getState() {
return mState;
}
/**
* Returns the call flags.
*
* @return call flags
* @hide
*/
public int getCallFlags() {
return mCallFlags;
}
/**
* Whether the call direction is incoming.
*
* @return true if incoming call, false otherwise
* @hide
*/
public boolean isIncomingCall() {
return (mCallFlags & FLAG_OUTGOING_CALL) == 0;
}
}