blob: 86bc201454319a79c3a54aad5703f1a25c58bb3b [file] [log] [blame]
/*
* Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of The Linux Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.android.internal.telephony;
import android.text.TextUtils;
import android.telephony.Rlog;
/**
* Class holding all the information of a subscription from UICC Card.
*/
public final class Subscription {
private static final String LOG_TAG = "Subscription";
public int slotId; // Slot id
public int m3gppIndex; // Subscription index in the card for GSM
public int m3gpp2Index; // Subscription index in the card for CDMA
public int subId; // SUB 0 or SUB 1
public SubscriptionStatus subStatus; // DEACTIVATE = 0, ACTIVATE = 1,
// ACTIVATED = 2, DEACTIVATED = 3, INVALID = 4;
public String appId;
public String appLabel;
public String appType;
public String iccId;
private boolean DEBUG = false;
/**
* Subscription activation status
*/
public enum SubscriptionStatus {
SUB_DEACTIVATE,
SUB_ACTIVATE,
SUB_ACTIVATED,
SUB_DEACTIVATED,
SUB_INVALID
}
public static final int SUBSCRIPTION_INDEX_INVALID = -1;
public Subscription() {
clear();
}
public String toString() {
return "Subscription = { "
+ "slotId = " + slotId
+ ", 3gppIndex = " + m3gppIndex
+ ", 3gpp2Index = " + m3gpp2Index
+ ", subId = " + subId
+ ", subStatus = " + subStatus
+ ", appId = " + appId
+ ", appLabel = " + appLabel
+ ", appType = " + appType
+ ", iccId = " + iccId + " }";
}
public boolean equals(Subscription sub) {
if (sub != null) {
if ((slotId == sub.slotId) && (m3gppIndex == sub.m3gppIndex)
&& (m3gpp2Index == sub.m3gpp2Index) && (subId == sub.subId)
&& (subStatus == sub.subStatus)
&& ((TextUtils.isEmpty(appId) && TextUtils.isEmpty(sub.appId))
|| TextUtils.equals(appId, sub.appId))
&& ((TextUtils.isEmpty(appLabel) && TextUtils.isEmpty(sub.appLabel))
|| TextUtils.equals(appLabel, sub.appLabel))
&& ((TextUtils.isEmpty(appType) && TextUtils.isEmpty(sub.appType))
|| TextUtils.equals(appType, sub.appType))
&& ((TextUtils.isEmpty(iccId) && TextUtils.isEmpty(sub.iccId))
|| TextUtils.equals(iccId, sub.iccId))) {
return true;
}
} else {
Rlog.d(LOG_TAG, "Subscription.equals: sub == null");
}
return false;
}
/**
* Return true if the appIndex, appId, appLabel and iccId are matching.
* @param sub
* @return
*/
public boolean isSame(Subscription sub) {
// Not checking the subId, subStatus and slotId, which are related to the
// activated status
if (sub != null) {
if (DEBUG) {
Rlog.d(LOG_TAG, "isSame(): this = " + m3gppIndex
+ ":" + m3gpp2Index
+ ":" + appId
+ ":" + appType
+ ":" + iccId);
Rlog.d(LOG_TAG, "compare with = " + sub.m3gppIndex
+ ":" + sub.m3gpp2Index
+ ":" + sub.appId
+ ":" + sub.appType
+ ":" + sub.iccId);
}
if ((m3gppIndex == sub.m3gppIndex)
&& (m3gpp2Index == sub.m3gpp2Index)
&& ((TextUtils.isEmpty(appId) && TextUtils.isEmpty(sub.appId))
|| TextUtils.equals(appId, sub.appId))
&& ((TextUtils.isEmpty(appType) && TextUtils.isEmpty(sub.appType))
|| TextUtils.equals(appType, sub.appType))
&& ((TextUtils.isEmpty(iccId) && TextUtils.isEmpty(sub.iccId))
|| TextUtils.equals(iccId, sub.iccId))){
return true;
}
}
return false;
}
/**
* Reset the subscription
*/
public void clear() {
slotId = SUBSCRIPTION_INDEX_INVALID;
m3gppIndex = SUBSCRIPTION_INDEX_INVALID;
m3gpp2Index = SUBSCRIPTION_INDEX_INVALID;
subId = SUBSCRIPTION_INDEX_INVALID;
subStatus = SubscriptionStatus.SUB_INVALID;
appId = null;
appLabel = null;
appType = null;
iccId = null;
}
/**
* Copies the subscription parameters
* @param from
* @return
*/
public Subscription copyFrom(Subscription from) {
if (from != null) {
slotId = from.slotId;
m3gppIndex = from.m3gppIndex;
m3gpp2Index = from.m3gpp2Index;
subId = from.subId;
subStatus = from.subStatus;
if (from.appId != null) {
appId = new String(from.appId);
}
if (from.appLabel != null) {
appLabel = new String(from.appLabel);
}
if (from.appType != null) {
appType = new String(from.appType);
}
if (from.iccId != null) {
iccId = new String(from.iccId);
}
}
return this;
}
/**
* Return the valid app index (either 3gpp or 3gpp2 index)
* @return
*/
public int getAppIndex() {
if (this.m3gppIndex != SUBSCRIPTION_INDEX_INVALID) {
return this.m3gppIndex;
} else {
return this.m3gpp2Index;
}
}
}