diff options
author | Wink Saville <wink@google.com> | 2011-05-26 18:18:52 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-05-26 18:18:52 -0700 |
commit | e55e5e7c406bdedc67c6e536c981146e2b335b43 (patch) | |
tree | 4116501144d2c9568ff7dd0601d66df9846b7c3b /telephony | |
parent | 8fcbfb52607263754b6d3895a112f792c5c3a12e (diff) | |
parent | e14a59e96c2a4362a7d72685a0669a5c3338f421 (diff) | |
download | frameworks_base-e55e5e7c406bdedc67c6e536c981146e2b335b43.zip frameworks_base-e55e5e7c406bdedc67c6e536c981146e2b335b43.tar.gz frameworks_base-e55e5e7c406bdedc67c6e536c981146e2b335b43.tar.bz2 |
Merge "Derive ICC status from multiple application status for UICC" into honeycomb-LTE
Diffstat (limited to 'telephony')
-rw-r--r-- | telephony/java/com/android/internal/telephony/IccCard.java | 93 |
1 files changed, 59 insertions, 34 deletions
diff --git a/telephony/java/com/android/internal/telephony/IccCard.java b/telephony/java/com/android/internal/telephony/IccCard.java index a516b49..f2506da 100644 --- a/telephony/java/com/android/internal/telephony/IccCard.java +++ b/telephony/java/com/android/internal/telephony/IccCard.java @@ -722,52 +722,77 @@ public abstract class IccCard { currentRadioState == RadioState.RUIM_READY || (currentRadioState == RadioState.NV_READY && (mPhone.getLteOnCdmaMode() == Phone.LTE_ON_CDMA_TRUE))) { - int index; + + State csimState = + getAppState(mIccCardStatus.getCdmaSubscriptionAppIndex()); + State usimState = + getAppState(mIccCardStatus.getGsmUmtsSubscriptionAppIndex()); + + if(mDbg) log("USIM=" + usimState + " CSIM=" + csimState); + + if (mPhone.getLteOnCdmaMode() == Phone.LTE_ON_CDMA_TRUE) { + // UICC card contains both USIM and CSIM + // Return consolidated status + return getConsolidatedState(csimState, usimState, csimState); + } // check for CDMA radio technology if (currentRadioState == RadioState.RUIM_LOCKED_OR_ABSENT || currentRadioState == RadioState.RUIM_READY) { - index = mIccCardStatus.getCdmaSubscriptionAppIndex(); - } - else { - index = mIccCardStatus.getGsmUmtsSubscriptionAppIndex(); + return csimState; } + return usimState; + } - IccCardApplication app; - if (index >= 0 && index < IccCardStatus.CARD_MAX_APPS) { - app = mIccCardStatus.getApplication(index); - } else { - Log.e(mLogTag, "[IccCard] Invalid Subscription Application index:" + index); - return IccCard.State.ABSENT; - } + return IccCard.State.ABSENT; + } - if (app == null) { - Log.e(mLogTag, "[IccCard] Subscription Application in not present"); - return IccCard.State.ABSENT; - } + private State getAppState(int appIndex) { + IccCardApplication app; + if (appIndex >= 0 && appIndex < IccCardStatus.CARD_MAX_APPS) { + app = mIccCardStatus.getApplication(appIndex); + } else { + Log.e(mLogTag, "[IccCard] Invalid Subscription Application index:" + appIndex); + return IccCard.State.ABSENT; + } - // check if PIN required - if (app.app_state.isPinRequired()) { - return IccCard.State.PIN_REQUIRED; - } - if (app.app_state.isPukRequired()) { - return IccCard.State.PUK_REQUIRED; - } - if (app.app_state.isSubscriptionPersoEnabled()) { - return IccCard.State.NETWORK_LOCKED; - } - if (app.app_state.isAppReady()) { - return IccCard.State.READY; - } - if (app.app_state.isAppNotReady()) { - return IccCard.State.NOT_READY; - } - return IccCard.State.NOT_READY; + if (app == null) { + Log.e(mLogTag, "[IccCard] Subscription Application in not present"); + return IccCard.State.ABSENT; } - return IccCard.State.ABSENT; + // check if PIN required + if (app.app_state.isPinRequired()) { + return IccCard.State.PIN_REQUIRED; + } + if (app.app_state.isPukRequired()) { + return IccCard.State.PUK_REQUIRED; + } + if (app.app_state.isSubscriptionPersoEnabled()) { + return IccCard.State.NETWORK_LOCKED; + } + if (app.app_state.isAppReady()) { + return IccCard.State.READY; + } + if (app.app_state.isAppNotReady()) { + return IccCard.State.NOT_READY; + } + return IccCard.State.NOT_READY; } + private State getConsolidatedState(State left, State right, State preferredState) { + // Check if either is absent. + if (right == IccCard.State.ABSENT) return left; + if (left == IccCard.State.ABSENT) return right; + + // Disregards if either is NOT_READY + if (right == IccCard.State.NOT_READY) return left; + if (left == IccCard.State.NOT_READY) return right; + + // At this point, FW currently just assumes the status will be + // consistent across the applications... + return preferredState; + } public boolean isApplicationOnIcc(IccCardApplication.AppType type) { if (mIccCardStatus == null) return false; |