diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2022-01-18 23:59:58 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-01-18 23:59:58 +0000 |
commit | d15d8266b900c549d2eed52c56f82d7c3c3792c8 (patch) | |
tree | 0b7c4c70453c091e24e37758ff1b1fd49bf20eb3 /framework/java/android/bluetooth/BluetoothHeadsetClientCall.java | |
parent | 7d69d903a5ee30dac4abc82e056f2b8ec0278708 (diff) | |
parent | aa6d8f71ae61c0e57b35258c00d28fcba5154f09 (diff) |
Merge changes from topic "migrate-sc-bt" into sc-v2-dev-plus-aosp
* changes:
Migrating BT files into packages/modules/Bluetooth
Merge history of Bluetooth API from frameworks/base
Diffstat (limited to 'framework/java/android/bluetooth/BluetoothHeadsetClientCall.java')
-rw-r--r-- | framework/java/android/bluetooth/BluetoothHeadsetClientCall.java | 323 |
1 files changed, 323 insertions, 0 deletions
diff --git a/framework/java/android/bluetooth/BluetoothHeadsetClientCall.java b/framework/java/android/bluetooth/BluetoothHeadsetClientCall.java new file mode 100644 index 0000000000..032b507f5d --- /dev/null +++ b/framework/java/android/bluetooth/BluetoothHeadsetClientCall.java @@ -0,0 +1,323 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * 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.NonNull; +import android.compat.annotation.UnsupportedAppUsage; +import android.content.AttributionSource; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import android.os.SystemClock; + +import java.util.UUID; + +/** + * This class represents a single call, its state and properties. + * It implements {@link Parcelable} for inter-process message passing. + * + * @hide + */ +public final class BluetoothHeadsetClientCall implements Parcelable, Attributable { + + /* Call state */ + /** + * Call is active. + */ + public static final int CALL_STATE_ACTIVE = 0; + /** + * Call is in held state. + */ + public static final int CALL_STATE_HELD = 1; + /** + * Outgoing call that is being dialed right now. + */ + public static final int CALL_STATE_DIALING = 2; + /** + * Outgoing call that remote party has already been alerted about. + */ + public static final int CALL_STATE_ALERTING = 3; + /** + * Incoming call that can be accepted or rejected. + */ + public static final int CALL_STATE_INCOMING = 4; + /** + * Waiting call state when there is already an active call. + */ + public static final int CALL_STATE_WAITING = 5; + /** + * Call that has been held by response and hold + * (see Bluetooth specification for further references). + */ + public static final int CALL_STATE_HELD_BY_RESPONSE_AND_HOLD = 6; + /** + * Call that has been already terminated and should not be referenced as a valid call. + */ + public static final int CALL_STATE_TERMINATED = 7; + + private final BluetoothDevice mDevice; + private final int mId; + private int mState; + private String mNumber; + private boolean mMultiParty; + private final boolean mOutgoing; + private final UUID mUUID; + private final long mCreationElapsedMilli; + private final boolean mInBandRing; + + /** + * Creates BluetoothHeadsetClientCall instance. + */ + public BluetoothHeadsetClientCall(BluetoothDevice device, int id, int state, String number, + boolean multiParty, boolean outgoing, boolean inBandRing) { + this(device, id, UUID.randomUUID(), state, number, multiParty, outgoing, inBandRing); + } + + public BluetoothHeadsetClientCall(BluetoothDevice device, int id, UUID uuid, int state, + String number, boolean multiParty, boolean outgoing, boolean inBandRing) { + mDevice = device; + mId = id; + mUUID = uuid; + mState = state; + mNumber = number != null ? number : ""; + mMultiParty = multiParty; + mOutgoing = outgoing; + mInBandRing = inBandRing; + mCreationElapsedMilli = SystemClock.elapsedRealtime(); + } + + /** {@hide} */ + public void setAttributionSource(@NonNull AttributionSource attributionSource) { + Attributable.setAttributionSource(mDevice, attributionSource); + } + + /** + * Sets call's state. + * + * <p>Note: This is an internal function and shouldn't be exposed</p> + * + * @param state new call state. + */ + public void setState(int state) { + mState = state; + } + + /** + * Sets call's number. + * + * <p>Note: This is an internal function and shouldn't be exposed</p> + * + * @param number String representing phone number. + */ + public void setNumber(String number) { + mNumber = number; + } + + /** + * Sets this call as multi party call. + * + * <p>Note: This is an internal function and shouldn't be exposed</p> + * + * @param multiParty if <code>true</code> sets this call as a part of multi party conference. + */ + public void setMultiParty(boolean multiParty) { + mMultiParty = multiParty; + } + + /** + * Gets call's device. + * + * @return call device. + */ + public BluetoothDevice getDevice() { + return mDevice; + } + + /** + * Gets call's Id. + * + * @return call id. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + public int getId() { + return mId; + } + + /** + * Gets call's UUID. + * + * @return call uuid + * @hide + */ + public UUID getUUID() { + return mUUID; + } + + /** + * Gets call's current state. + * + * @return state of this particular phone call. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + public int getState() { + return mState; + } + + /** + * Gets call's number. + * + * @return string representing phone number. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + public String getNumber() { + 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). + * + * @return <code>true</code> if call is a multi party call, <code>false</code> otherwise. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + public boolean isMultiParty() { + return mMultiParty; + } + + /** + * Checks if this call is an outgoing call. + * + * @return <code>true</code> if its outgoing call, <code>false</code> otherwise. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + public boolean isOutgoing() { + return mOutgoing; + } + + /** + * Checks if the ringtone will be generated by the connected phone + * + * @return <code>true</code> if in band ring is enabled, <code>false</code> otherwise. + */ + public boolean isInBandRing() { + return mInBandRing; + } + + + @Override + public String toString() { + return toString(false); + } + + /** + * Generate a log string for this call + * @param loggable whether device address should be logged + * @return log string + */ + public String toString(boolean loggable) { + StringBuilder builder = new StringBuilder("BluetoothHeadsetClientCall{mDevice: "); + builder.append(loggable ? mDevice : mDevice.hashCode()); + builder.append(", mId: "); + builder.append(mId); + builder.append(", mUUID: "); + builder.append(mUUID); + builder.append(", mState: "); + switch (mState) { + case CALL_STATE_ACTIVE: + builder.append("ACTIVE"); + break; + case CALL_STATE_HELD: + builder.append("HELD"); + break; + case CALL_STATE_DIALING: + builder.append("DIALING"); + break; + case CALL_STATE_ALERTING: + builder.append("ALERTING"); + break; + case CALL_STATE_INCOMING: + builder.append("INCOMING"); + break; + case CALL_STATE_WAITING: + builder.append("WAITING"); + break; + case CALL_STATE_HELD_BY_RESPONSE_AND_HOLD: + builder.append("HELD_BY_RESPONSE_AND_HOLD"); + break; + case CALL_STATE_TERMINATED: + builder.append("TERMINATED"); + break; + default: + builder.append(mState); + break; + } + builder.append(", mNumber: "); + builder.append(loggable ? mNumber : mNumber.hashCode()); + builder.append(", mMultiParty: "); + builder.append(mMultiParty); + builder.append(", mOutgoing: "); + builder.append(mOutgoing); + builder.append(", mInBandRing: "); + builder.append(mInBandRing); + builder.append("}"); + return builder.toString(); + } + + /** + * {@link Parcelable.Creator} interface implementation. + */ + public static final @android.annotation.NonNull Parcelable.Creator<BluetoothHeadsetClientCall> CREATOR = + new Parcelable.Creator<BluetoothHeadsetClientCall>() { + @Override + public BluetoothHeadsetClientCall createFromParcel(Parcel in) { + return new BluetoothHeadsetClientCall((BluetoothDevice) in.readParcelable(null), + in.readInt(), UUID.fromString(in.readString()), in.readInt(), + in.readString(), in.readInt() == 1, in.readInt() == 1, + in.readInt() == 1); + } + + @Override + public BluetoothHeadsetClientCall[] newArray(int size) { + return new BluetoothHeadsetClientCall[size]; + } + }; + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeParcelable(mDevice, 0); + out.writeInt(mId); + out.writeString(mUUID.toString()); + out.writeInt(mState); + out.writeString(mNumber); + out.writeInt(mMultiParty ? 1 : 0); + out.writeInt(mOutgoing ? 1 : 0); + out.writeInt(mInBandRing ? 1 : 0); + } + + @Override + public int describeContents() { + return 0; + } +} |