To prepare for enabling MissingNullability Metalava check this CL works on adding missing nullability issues that metalava flags if we tell it to flag new things since API 29. This is not a complete CL, mostly addresses public api and toString/equals for @SystemApi Exempt-From-Owner-Approval: Large scale nullability clean up Bug: 124515653 Test: make -j checkapi Merged-In: I109260842cfc25f06e40694997fcbb4afa02c867 Change-Id: I109260842cfc25f06e40694997fcbb4afa02c867
235 lines
7.2 KiB
Java
235 lines
7.2 KiB
Java
/*
|
|
* Copyright (C) 2018 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.IntDef;
|
|
import android.annotation.NonNull;
|
|
import android.annotation.Nullable;
|
|
import android.annotation.SystemApi;
|
|
import android.os.Parcel;
|
|
import android.os.Parcelable;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* Class for the information of a UICC slot.
|
|
* @hide
|
|
*/
|
|
@SystemApi
|
|
public class UiccSlotInfo implements Parcelable {
|
|
/**
|
|
* Card state.
|
|
* @hide
|
|
*/
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
@IntDef(prefix = { "CARD_STATE_INFO_" }, value = {
|
|
CARD_STATE_INFO_ABSENT,
|
|
CARD_STATE_INFO_PRESENT,
|
|
CARD_STATE_INFO_ERROR,
|
|
CARD_STATE_INFO_RESTRICTED
|
|
})
|
|
public @interface CardStateInfo {}
|
|
|
|
/** Card state absent. */
|
|
public static final int CARD_STATE_INFO_ABSENT = 1;
|
|
|
|
/** Card state present. */
|
|
public static final int CARD_STATE_INFO_PRESENT = 2;
|
|
|
|
/** Card state error. */
|
|
public static final int CARD_STATE_INFO_ERROR = 3;
|
|
|
|
/** Card state restricted. */
|
|
public static final int CARD_STATE_INFO_RESTRICTED = 4;
|
|
|
|
private final boolean mIsActive;
|
|
private final boolean mIsEuicc;
|
|
private final String mCardId;
|
|
private final @CardStateInfo int mCardStateInfo;
|
|
private final int mLogicalSlotIdx;
|
|
private final boolean mIsExtendedApduSupported;
|
|
private final boolean mIsRemovable;
|
|
|
|
public static final @android.annotation.NonNull Creator<UiccSlotInfo> CREATOR = new Creator<UiccSlotInfo>() {
|
|
@Override
|
|
public UiccSlotInfo createFromParcel(Parcel in) {
|
|
return new UiccSlotInfo(in);
|
|
}
|
|
|
|
@Override
|
|
public UiccSlotInfo[] newArray(int size) {
|
|
return new UiccSlotInfo[size];
|
|
}
|
|
};
|
|
|
|
private UiccSlotInfo(Parcel in) {
|
|
mIsActive = in.readByte() != 0;
|
|
mIsEuicc = in.readByte() != 0;
|
|
mCardId = in.readString();
|
|
mCardStateInfo = in.readInt();
|
|
mLogicalSlotIdx = in.readInt();
|
|
mIsExtendedApduSupported = in.readByte() != 0;
|
|
mIsRemovable = in.readByte() != 0;
|
|
}
|
|
|
|
@Override
|
|
public void writeToParcel(Parcel dest, int flags) {
|
|
dest.writeByte((byte) (mIsActive ? 1 : 0));
|
|
dest.writeByte((byte) (mIsEuicc ? 1 : 0));
|
|
dest.writeString(mCardId);
|
|
dest.writeInt(mCardStateInfo);
|
|
dest.writeInt(mLogicalSlotIdx);
|
|
dest.writeByte((byte) (mIsExtendedApduSupported ? 1 : 0));
|
|
dest.writeByte((byte) (mIsRemovable ? 1 : 0));
|
|
}
|
|
|
|
@Override
|
|
public int describeContents() {
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Construct a UiccSlotInfo.
|
|
* @deprecated apps should not be constructing UiccSlotInfo objects
|
|
*/
|
|
@Deprecated
|
|
public UiccSlotInfo(boolean isActive, boolean isEuicc, String cardId,
|
|
@CardStateInfo int cardStateInfo, int logicalSlotIdx, boolean isExtendedApduSupported) {
|
|
this.mIsActive = isActive;
|
|
this.mIsEuicc = isEuicc;
|
|
this.mCardId = cardId;
|
|
this.mCardStateInfo = cardStateInfo;
|
|
this.mLogicalSlotIdx = logicalSlotIdx;
|
|
this.mIsExtendedApduSupported = isExtendedApduSupported;
|
|
this.mIsRemovable = false;
|
|
}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
public UiccSlotInfo(boolean isActive, boolean isEuicc, String cardId,
|
|
@CardStateInfo int cardStateInfo, int logicalSlotIdx, boolean isExtendedApduSupported,
|
|
boolean isRemovable) {
|
|
this.mIsActive = isActive;
|
|
this.mIsEuicc = isEuicc;
|
|
this.mCardId = cardId;
|
|
this.mCardStateInfo = cardStateInfo;
|
|
this.mLogicalSlotIdx = logicalSlotIdx;
|
|
this.mIsExtendedApduSupported = isExtendedApduSupported;
|
|
this.mIsRemovable = isRemovable;
|
|
}
|
|
|
|
public boolean getIsActive() {
|
|
return mIsActive;
|
|
}
|
|
|
|
public boolean getIsEuicc() {
|
|
return mIsEuicc;
|
|
}
|
|
|
|
/**
|
|
* Returns the ICCID of the card in the slot, or the EID of an active eUICC.
|
|
* <p>
|
|
* If the UICC slot is for an active eUICC, returns the EID.
|
|
* If the UICC slot is for an inactive eUICC, returns the ICCID of the enabled profile, or the
|
|
* root profile if all other profiles are disabled.
|
|
* If the UICC slot is not an eUICC, returns the ICCID.
|
|
*/
|
|
public String getCardId() {
|
|
return mCardId;
|
|
}
|
|
|
|
@CardStateInfo
|
|
public int getCardStateInfo() {
|
|
return mCardStateInfo;
|
|
}
|
|
|
|
public int getLogicalSlotIdx() {
|
|
return mLogicalSlotIdx;
|
|
}
|
|
|
|
/**
|
|
* @return {@code true} if this slot supports extended APDU from ATR, {@code false} otherwise.
|
|
*/
|
|
public boolean getIsExtendedApduSupported() {
|
|
return mIsExtendedApduSupported;
|
|
}
|
|
|
|
/**
|
|
* Return whether the UICC slot is for a removable UICC.
|
|
* <p>
|
|
* UICCs are generally removable, but eUICCs may be removable or built in to the device.
|
|
* @return true if the slot is for removable UICCs
|
|
*/
|
|
public boolean isRemovable() {
|
|
return mIsRemovable;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(@Nullable Object obj) {
|
|
if (this == obj) {
|
|
return true;
|
|
}
|
|
if (obj == null || getClass() != obj.getClass()) {
|
|
return false;
|
|
}
|
|
|
|
UiccSlotInfo that = (UiccSlotInfo) obj;
|
|
return (mIsActive == that.mIsActive)
|
|
&& (mIsEuicc == that.mIsEuicc)
|
|
&& (Objects.equals(mCardId, that.mCardId))
|
|
&& (mCardStateInfo == that.mCardStateInfo)
|
|
&& (mLogicalSlotIdx == that.mLogicalSlotIdx)
|
|
&& (mIsExtendedApduSupported == that.mIsExtendedApduSupported)
|
|
&& (mIsRemovable == that.mIsRemovable);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
int result = 1;
|
|
result = 31 * result + (mIsActive ? 1 : 0);
|
|
result = 31 * result + (mIsEuicc ? 1 : 0);
|
|
result = 31 * result + Objects.hashCode(mCardId);
|
|
result = 31 * result + mCardStateInfo;
|
|
result = 31 * result + mLogicalSlotIdx;
|
|
result = 31 * result + (mIsExtendedApduSupported ? 1 : 0);
|
|
result = 31 * result + (mIsRemovable ? 1 : 0);
|
|
return result;
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public String toString() {
|
|
return "UiccSlotInfo (mIsActive="
|
|
+ mIsActive
|
|
+ ", mIsEuicc="
|
|
+ mIsEuicc
|
|
+ ", mCardId="
|
|
+ mCardId
|
|
+ ", cardState="
|
|
+ mCardStateInfo
|
|
+ ", phoneId="
|
|
+ mLogicalSlotIdx
|
|
+ ", mIsExtendedApduSupported="
|
|
+ mIsExtendedApduSupported
|
|
+ ", mIsRemovable="
|
|
+ mIsRemovable
|
|
+ ")";
|
|
}
|
|
}
|