script-astra/Android/Sdk/sources/android-35/android/telephony/CallState.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

410 lines
13 KiB
Java

/*
* Copyright (C) 2022 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.telephony;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Annotation.ImsCallServiceType;
import android.telephony.Annotation.ImsCallType;
import android.telephony.Annotation.NetworkType;
import android.telephony.Annotation.PreciseCallStates;
import android.telephony.ims.ImsCallProfile;
import android.telephony.ims.ImsCallSession;
import java.util.Objects;
/**
* Contains information about various states for a call.
* @hide
*/
@SystemApi
public final class CallState implements Parcelable {
/**
* Call classifications are just used for backward compatibility of deprecated API {@link
* TelephonyCallback#CallAttributesListener#onCallAttributesChanged}, Since these will be
* removed when the deprecated API is removed, they should not be opened.
*/
/**
* Call classification is not valid. It should not be opened.
* @hide
*/
public static final int CALL_CLASSIFICATION_UNKNOWN = -1;
/**
* Call classification indicating foreground call
* @hide
*/
public static final int CALL_CLASSIFICATION_RINGING = 0;
/**
* Call classification indicating background call
* @hide
*/
public static final int CALL_CLASSIFICATION_FOREGROUND = 1;
/**
* Call classification indicating ringing call
* @hide
*/
public static final int CALL_CLASSIFICATION_BACKGROUND = 2;
/**
* Call classification Max value.
* @hide
*/
public static final int CALL_CLASSIFICATION_MAX = CALL_CLASSIFICATION_BACKGROUND + 1;
@PreciseCallStates
private final int mPreciseCallState;
@NetworkType
private final int mNetworkType; // TelephonyManager.NETWORK_TYPE_* ints
private final CallQuality mCallQuality;
private final int mCallClassification;
/**
* IMS call session ID. {@link ImsCallSession#getCallId()}
*/
@Nullable
private String mImsCallId;
/**
* IMS call service type of this call
*/
@ImsCallServiceType
private int mImsCallServiceType;
/**
* IMS call type of this call.
*/
@ImsCallType
private int mImsCallType;
/**
* Constructor of CallAttributes
*
* @param callState call state defined in {@link PreciseCallState}
* @param networkType network type for this call attributes
* @param callQuality call quality for this call attributes, only CallState in
* {@link PreciseCallState#PRECISE_CALL_STATE_ACTIVE} will have valid call
* quality.
* @param callClassification call classification
* @param imsCallId IMS call session ID for this call attributes
* @param imsCallServiceType IMS call service type for this call attributes
* @param imsCallType IMS call type for this call attributes
*/
private CallState(@PreciseCallStates int callState, @NetworkType int networkType,
@NonNull CallQuality callQuality, int callClassification, @Nullable String imsCallId,
@ImsCallServiceType int imsCallServiceType, @ImsCallType int imsCallType) {
this.mPreciseCallState = callState;
this.mNetworkType = networkType;
this.mCallQuality = callQuality;
this.mCallClassification = callClassification;
this.mImsCallId = imsCallId;
this.mImsCallServiceType = imsCallServiceType;
this.mImsCallType = imsCallType;
}
@NonNull
@Override
public String toString() {
return "mPreciseCallState=" + mPreciseCallState + " mNetworkType=" + mNetworkType
+ " mCallQuality=" + mCallQuality + " mCallClassification" + mCallClassification
+ " mImsCallId=" + mImsCallId + " mImsCallServiceType=" + mImsCallServiceType
+ " mImsCallType=" + mImsCallType;
}
private CallState(Parcel in) {
this.mPreciseCallState = in.readInt();
this.mNetworkType = in.readInt();
this.mCallQuality = in.readParcelable(
CallQuality.class.getClassLoader(), CallQuality.class);
this.mCallClassification = in.readInt();
this.mImsCallId = in.readString();
this.mImsCallServiceType = in.readInt();
this.mImsCallType = in.readInt();
}
// getters
/**
* Returns the precise call state of the call.
*/
@PreciseCallStates
public int getCallState() {
return mPreciseCallState;
}
/**
* Returns the {@link TelephonyManager#NetworkType} of the call.
*
* @see TelephonyManager#NETWORK_TYPE_UNKNOWN
* @see TelephonyManager#NETWORK_TYPE_GPRS
* @see TelephonyManager#NETWORK_TYPE_EDGE
* @see TelephonyManager#NETWORK_TYPE_UMTS
* @see TelephonyManager#NETWORK_TYPE_CDMA
* @see TelephonyManager#NETWORK_TYPE_EVDO_0
* @see TelephonyManager#NETWORK_TYPE_EVDO_A
* @see TelephonyManager#NETWORK_TYPE_1xRTT
* @see TelephonyManager#NETWORK_TYPE_HSDPA
* @see TelephonyManager#NETWORK_TYPE_HSUPA
* @see TelephonyManager#NETWORK_TYPE_HSPA
* @see TelephonyManager#NETWORK_TYPE_IDEN
* @see TelephonyManager#NETWORK_TYPE_EVDO_B
* @see TelephonyManager#NETWORK_TYPE_LTE
* @see TelephonyManager#NETWORK_TYPE_EHRPD
* @see TelephonyManager#NETWORK_TYPE_HSPAP
* @see TelephonyManager#NETWORK_TYPE_GSM
* @see TelephonyManager#NETWORK_TYPE_TD_SCDMA
* @see TelephonyManager#NETWORK_TYPE_IWLAN
* @see TelephonyManager#NETWORK_TYPE_LTE_CA
* @see TelephonyManager#NETWORK_TYPE_NR
*/
@NetworkType
public int getNetworkType() {
return mNetworkType;
}
/**
* Returns the {#link CallQuality} of the call.
* @return call quality for this call attributes, only CallState in {@link
* PreciseCallState#PRECISE_CALL_STATE_ACTIVE} will have valid call quality. It will be
* null for the call which is not in {@link PreciseCallState#PRECISE_CALL_STATE_ACTIVE}.
*/
@Nullable
public CallQuality getCallQuality() {
return mCallQuality;
}
/**
* Returns the call classification.
* @hide
*/
public int getCallClassification() {
return mCallClassification;
}
/**
* Returns the IMS call session ID.
*/
@Nullable
public String getImsCallSessionId() {
return mImsCallId;
}
/**
* Returns the IMS call service type.
*/
@ImsCallServiceType
public int getImsCallServiceType() {
return mImsCallServiceType;
}
/**
* Returns the IMS call type.
*/
@ImsCallType
public int getImsCallType() {
return mImsCallType;
}
@Override
public int hashCode() {
return Objects.hash(mPreciseCallState, mNetworkType, mCallQuality, mCallClassification,
mImsCallId, mImsCallServiceType, mImsCallType);
}
@Override
public boolean equals(@Nullable Object o) {
if (o == null || !(o instanceof CallState) || hashCode() != o.hashCode()) {
return false;
}
if (this == o) {
return true;
}
CallState s = (CallState) o;
return (mPreciseCallState == s.mPreciseCallState
&& mNetworkType == s.mNetworkType
&& Objects.equals(mCallQuality, s.mCallQuality)
&& mCallClassification == s.mCallClassification
&& Objects.equals(mImsCallId, s.mImsCallId)
&& mImsCallType == s.mImsCallType
&& mImsCallServiceType == s.mImsCallServiceType);
}
/**
* {@link Parcelable#describeContents}
*/
public int describeContents() {
return 0;
}
/**
* {@link Parcelable#writeToParcel}
*/
public void writeToParcel(@Nullable Parcel dest, int flags) {
dest.writeInt(mPreciseCallState);
dest.writeInt(mNetworkType);
dest.writeParcelable(mCallQuality, flags);
dest.writeInt(mCallClassification);
dest.writeString(mImsCallId);
dest.writeInt(mImsCallServiceType);
dest.writeInt(mImsCallType);
}
public static final @NonNull Creator<CallState> CREATOR = new Creator() {
public CallState createFromParcel(Parcel in) {
return new CallState(in);
}
public CallState[] newArray(int size) {
return new CallState[size];
}
};
/**
* Builder of {@link CallState}
*
* <p>The example below shows how you might create a new {@code CallState}. A precise call state
* {@link PreciseCallStates} is mandatory to build a CallState.
*
* <pre><code>
*
* CallState = new CallState.Builder({@link PreciseCallStates})
* .setNetworkType({@link TelephonyManager#NETWORK_TYPE_LTE})
* .setCallQuality({@link CallQuality})
* .setImsCallSessionId({@link String})
* .setImsCallServiceType({@link ImsCallProfile#SERVICE_TYPE_NORMAL})
* .setImsCallType({@link ImsCallProfile#CALL_TYPE_VOICE})
* .build();
* </code></pre>
*/
public static final class Builder {
private @PreciseCallStates int mPreciseCallState;
private @NetworkType int mNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
private CallQuality mCallQuality = null;
private int mCallClassification = CALL_CLASSIFICATION_UNKNOWN;
private String mImsCallId;
private @ImsCallServiceType int mImsCallServiceType = ImsCallProfile.SERVICE_TYPE_NONE;
private @ImsCallType int mImsCallType = ImsCallProfile.CALL_TYPE_NONE;
/**
* Default constructor for the Builder.
*/
public Builder(@PreciseCallStates int preciseCallState) {
mPreciseCallState = preciseCallState;
}
/**
* Set network type of this call.
*
* @param networkType the transport type.
* @return The same instance of the builder.
*/
@NonNull
public CallState.Builder setNetworkType(@NetworkType int networkType) {
this.mNetworkType = networkType;
return this;
}
/**
* Set the call quality {@link CallQuality} of this call.
*
* @param callQuality call quality of active call.
* @return The same instance of the builder.
*/
@NonNull
public CallState.Builder setCallQuality(@Nullable CallQuality callQuality) {
this.mCallQuality = callQuality;
return this;
}
/**
* Set call classification for this call.
*
* @param classification call classification type defined in this class.
* @return The same instance of the builder.
* @hide
*/
@NonNull
public CallState.Builder setCallClassification(int classification) {
this.mCallClassification = classification;
return this;
}
/**
* Set IMS call session ID of this call.
*
* @param imsCallId IMS call session ID.
* @return The same instance of the builder.
*/
@NonNull
public CallState.Builder setImsCallSessionId(@Nullable String imsCallId) {
this.mImsCallId = imsCallId;
return this;
}
/**
* Set IMS call service type of this call.
*
* @param serviceType IMS call service type defined in {@link ImsCallProfile}.
* @return The same instance of the builder.
*/
@NonNull
public CallState.Builder setImsCallServiceType(@ImsCallServiceType int serviceType) {
this.mImsCallServiceType = serviceType;
return this;
}
/**
* Set IMS call type of this call.
*
* @param callType IMS call type defined in {@link ImsCallProfile}.
* @return The same instance of the builder.
*/
@NonNull
public CallState.Builder setImsCallType(@ImsCallType int callType) {
this.mImsCallType = callType;
return this;
}
/**
* Build the {@link CallState}
*
* @return the {@link CallState} object
*/
@NonNull
public CallState build() {
return new CallState(
mPreciseCallState,
mNetworkType,
mCallQuality,
mCallClassification,
mImsCallId,
mImsCallServiceType,
mImsCallType);
}
}
}