147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun/* 247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * Copyright (C) 2018 The Android Open Source Project 347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * 447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * Licensed under the Apache License, Version 2.0 (the "License"); 547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * you may not use this file except in compliance with the License. 647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * You may obtain a copy of the License at 747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * 847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * http://www.apache.org/licenses/LICENSE-2.0 947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * 1047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * Unless required by applicable law or agreed to in writing, software 1147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * distributed under the License is distributed on an "AS IS" BASIS, 1247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * See the License for the specific language governing permissions and 1447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * limitations under the License. 1547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun */ 1647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunpackage android.telephony.euicc; 1747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 1847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport android.annotation.IntDef; 1947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport android.annotation.Nullable; 204f73b9c09ac6ae73c22ad02872e362c817ab2d4cHolly Jiuyu Sunimport android.annotation.SystemApi; 2147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport android.os.Parcel; 2247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport android.os.Parcelable; 2347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 2447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport java.lang.annotation.Retention; 2547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport java.lang.annotation.RetentionPolicy; 2647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport java.util.Arrays; 2747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sunimport java.util.Objects; 2847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 2947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun/** 3047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * This represents a signed notification which is defined in SGP.22. It can be either a profile 3147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * installation result or a notification generated for profile operations (e.g., enabling, 3247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * disabling, or deleting). 3347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * 3447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * @hide 3547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun */ 364f73b9c09ac6ae73c22ad02872e362c817ab2d4cHolly Jiuyu Sun@SystemApi 374f73b9c09ac6ae73c22ad02872e362c817ab2d4cHolly Jiuyu Sunpublic final class EuiccNotification implements Parcelable { 3847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** Event */ 3947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Retention(RetentionPolicy.SOURCE) 4047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @IntDef(flag = true, prefix = { "EVENT_" }, value = { 4147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EVENT_INSTALL, 4247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EVENT_ENABLE, 4347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EVENT_DISABLE, 4447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EVENT_DELETE 4547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun }) 464f73b9c09ac6ae73c22ad02872e362c817ab2d4cHolly Jiuyu Sun /** @hide */ 4747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public @interface Event {} 4847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 4947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** A profile is downloaded and installed. */ 5047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final int EVENT_INSTALL = 1; 5147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 5247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** A profile is enabled. */ 5347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final int EVENT_ENABLE = 1 << 1; 5447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 5547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** A profile is disabled. */ 5647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final int EVENT_DISABLE = 1 << 2; 5747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 5847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** A profile is deleted. */ 5947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final int EVENT_DELETE = 1 << 3; 6047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 614f73b9c09ac6ae73c22ad02872e362c817ab2d4cHolly Jiuyu Sun /** Value of the bits of all the events including install, enable, disable and delete. */ 6247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Event 6347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final int ALL_EVENTS = 6447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EVENT_INSTALL | EVENT_ENABLE | EVENT_DISABLE | EVENT_DELETE; 6547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 6647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun private final int mSeq; 6747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun private final String mTargetAddr; 6847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Event private final int mEvent; 6947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Nullable private final byte[] mData; 7047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 7147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** 7247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * Creates an instance. 7347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * 7447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * @param seq The sequence number of this notification. 7547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * @param targetAddr The target server where to send this notification. 7647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * @param event The event which causes this notification. 7747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * @param data The data which needs to be sent to the target server. This can be null for 7847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun * building a list of notification metadata without data. 7947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun */ 8047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public EuiccNotification(int seq, String targetAddr, @Event int event, @Nullable byte[] data) { 8147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mSeq = seq; 8247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mTargetAddr = targetAddr; 8347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mEvent = event; 8447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mData = data; 8547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 8647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 8747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** @return The sequence number of this notification. */ 8847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public int getSeq() { 8947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return mSeq; 9047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 9147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 9247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** @return The target server address where this notification should be sent to. */ 9347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public String getTargetAddr() { 9447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return mTargetAddr; 9547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 9647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 9747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** @return The event of this notification. */ 9847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Event 9947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public int getEvent() { 10047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return mEvent; 10147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 10247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 10347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun /** @return The notification data which needs to be sent to the target server. */ 10447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Nullable 10547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public byte[] getData() { 10647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return mData; 10747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 10847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 10947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 11047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public boolean equals(Object obj) { 11147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun if (this == obj) { 11247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return true; 11347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 11447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun if (obj == null || getClass() != obj.getClass()) { 11547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return false; 11647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 11747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 11847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun EuiccNotification that = (EuiccNotification) obj; 11947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return mSeq == that.mSeq 12047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun && Objects.equals(mTargetAddr, that.mTargetAddr) 12147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun && mEvent == that.mEvent 12247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun && Arrays.equals(mData, that.mData); 12347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 12447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 12547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 12647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public int hashCode() { 12747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun int result = 1; 12847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun result = 31 * result + mSeq; 12947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun result = 31 * result + Objects.hashCode(mTargetAddr); 13047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun result = 31 * result + mEvent; 13147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun result = 31 * result + Arrays.hashCode(mData); 13247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return result; 13347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 13447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 13547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 13647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public String toString() { 13747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return "EuiccNotification (seq=" 13847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + mSeq 13947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + ", targetAddr=" 14047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + mTargetAddr 14147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + ", event=" 14247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + mEvent 14347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + ", data=" 14447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + (mData == null ? "null" : "byte[" + mData.length + "]") 14547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun + ")"; 14647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 14747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 14847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 14947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public int describeContents() { 15047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return 0; 15147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 15247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 15347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 15447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public void writeToParcel(Parcel dest, int flags) { 15547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun dest.writeInt(mSeq); 15647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun dest.writeString(mTargetAddr); 15747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun dest.writeInt(mEvent); 15847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun dest.writeByteArray(mData); 15947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 16047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 16147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun private EuiccNotification(Parcel source) { 16247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mSeq = source.readInt(); 16347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mTargetAddr = source.readString(); 16447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mEvent = source.readInt(); 16547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun mData = source.createByteArray(); 16647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 16747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 16847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public static final Creator<EuiccNotification> CREATOR = 16947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun new Creator<EuiccNotification>() { 17047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 17147a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public EuiccNotification createFromParcel(Parcel source) { 17247a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return new EuiccNotification(source); 17347a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 17447a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun 17547a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun @Override 17647a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun public EuiccNotification[] newArray(int size) { 17747a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun return new EuiccNotification[size]; 17847a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun } 17947a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun }; 18047a7426ddd9baf14307ad396198163daf6f409c7Holly Jiuyu Sun} 181