diff options
author | Sooraj Sasindran <sasindran@google.com> | 2018-06-28 14:01:21 -0700 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2018-06-30 04:27:14 +0000 |
commit | 309d5afed9da8bb06de355561287dbb6b4274031 (patch) | |
tree | cc1220043780f84c0f9670e279fd4267155e3172 | |
parent | 8544741073a2a95f261b80c6a0d8b2c2e4808c3d (diff) | |
download | telephony-pie-r2-s2-release.tar.gz |
Ignore the duplicate appandroid-wear-9.0.0_r9android-wear-9.0.0_r8android-wear-9.0.0_r7android-wear-9.0.0_r6android-wear-9.0.0_r5android-wear-9.0.0_r4android-wear-9.0.0_r34android-wear-9.0.0_r33android-wear-9.0.0_r32android-wear-9.0.0_r31android-wear-9.0.0_r30android-wear-9.0.0_r3android-wear-9.0.0_r29android-wear-9.0.0_r28android-wear-9.0.0_r27android-wear-9.0.0_r26android-wear-9.0.0_r25android-wear-9.0.0_r24android-wear-9.0.0_r23android-wear-9.0.0_r22android-wear-9.0.0_r21android-wear-9.0.0_r20android-wear-9.0.0_r2android-wear-9.0.0_r19android-wear-9.0.0_r18android-wear-9.0.0_r17android-wear-9.0.0_r16android-wear-9.0.0_r15android-wear-9.0.0_r14android-wear-9.0.0_r13android-wear-9.0.0_r12android-wear-9.0.0_r11android-wear-9.0.0_r10android-wear-9.0.0_r1android-vts-9.0_r9android-vts-9.0_r8android-vts-9.0_r7android-vts-9.0_r6android-vts-9.0_r5android-vts-9.0_r4android-vts-9.0_r19android-vts-9.0_r18android-vts-9.0_r17android-vts-9.0_r16android-vts-9.0_r15android-vts-9.0_r14android-vts-9.0_r13android-vts-9.0_r12android-vts-9.0_r11android-vts-9.0_r10android-cts-9.0_r9android-cts-9.0_r8android-cts-9.0_r7android-cts-9.0_r6android-cts-9.0_r5android-cts-9.0_r4android-cts-9.0_r3android-cts-9.0_r20android-cts-9.0_r2android-cts-9.0_r19android-cts-9.0_r18android-cts-9.0_r17android-cts-9.0_r16android-cts-9.0_r15android-cts-9.0_r14android-cts-9.0_r13android-cts-9.0_r12android-cts-9.0_r11android-cts-9.0_r10android-cts-9.0_r1android-9.0.0_r9android-9.0.0_r8android-9.0.0_r7android-9.0.0_r6android-9.0.0_r59android-9.0.0_r58android-9.0.0_r57android-9.0.0_r56android-9.0.0_r55android-9.0.0_r54android-9.0.0_r53android-9.0.0_r52android-9.0.0_r51android-9.0.0_r50android-9.0.0_r5android-9.0.0_r49android-9.0.0_r48android-9.0.0_r3android-9.0.0_r2android-9.0.0_r18android-9.0.0_r17android-9.0.0_r10android-9.0.0_r1security-pi-releasepie-vts-releasepie-s2-releasepie-release-2pie-releasepie-r2-s2-releasepie-r2-s1-releasepie-r2-releasepie-cts-release
Ignore duplicate sim app if another app of same type
is already in ready state.
Test: Added unit test and verified on OBDM sim card.
Bug: 110894572
Change-Id: I056263d015d6b476c75b43fcae0954fc18af79fa
(cherry picked from commit 75845a6a91d25dab483a91dbdee347b67dce6756)
3 files changed, 76 insertions, 2 deletions
diff --git a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java index 918e635de2..7a361e362a 100644 --- a/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java +++ b/src/java/com/android/internal/telephony/uicc/UiccCardApplication.java @@ -73,6 +73,9 @@ public class UiccCardApplication { private boolean mDesiredFdnEnabled; private boolean mIccLockEnabled; private boolean mDesiredPinLocked; + + // App state will be ignored while deciding whether the card is ready or not. + private boolean mIgnoreApp; private boolean mIccFdnAvailable = true; // Default is enabled. private CommandsInterface mCi; @@ -101,6 +104,7 @@ public class UiccCardApplication { mPin1Replaced = (as.pin1_replaced != 0); mPin1State = as.pin1; mPin2State = as.pin2; + mIgnoreApp = false; mContext = c; mCi = ci; @@ -874,6 +878,14 @@ public class UiccCardApplication { return mUiccProfile.getPhoneId(); } + public boolean isAppIgnored() { + return mIgnoreApp; + } + + public void setAppIgnoreState(boolean ignore) { + mIgnoreApp = ignore; + } + protected UiccProfile getUiccProfile() { return mUiccProfile; } diff --git a/src/java/com/android/internal/telephony/uicc/UiccProfile.java b/src/java/com/android/internal/telephony/uicc/UiccProfile.java index e80ab1d5b5..8d04174839 100644 --- a/src/java/com/android/internal/telephony/uicc/UiccProfile.java +++ b/src/java/com/android/internal/telephony/uicc/UiccProfile.java @@ -504,6 +504,7 @@ public class UiccProfile extends IccCard { setExternalState(IccCardConstants.State.NOT_READY); break; case APPSTATE_READY: + checkAndUpdateIfAnyAppToBeIgnored(); if (areAllApplicationsReady()) { if (areAllRecordsLoaded() && areCarrierPriviligeRulesLoaded()) { if (VDBG) log("updateExternalState: setting state to LOADED"); @@ -976,13 +977,34 @@ public class UiccProfile extends IccCard { return true; } - private boolean areAllApplicationsReady() { + private void checkAndUpdateIfAnyAppToBeIgnored() { + boolean[] appReadyStateTracker = new boolean[AppType.APPTYPE_ISIM.ordinal() + 1]; + for (UiccCardApplication app : mUiccApplications) { + if (app != null && isSupportedApplication(app) && app.isReady()) { + appReadyStateTracker[app.getType().ordinal()] = true; + } + } + for (UiccCardApplication app : mUiccApplications) { if (app != null && isSupportedApplication(app) && !app.isReady()) { + /* Checks if the appReadyStateTracker has already an entry in ready state + with same type as app */ + if (appReadyStateTracker[app.getType().ordinal()]) { + app.setAppIgnoreState(true); + } + } + } + } + + private boolean areAllApplicationsReady() { + for (UiccCardApplication app : mUiccApplications) { + if (app != null && isSupportedApplication(app) && !app.isReady() + && !app.isAppIgnored()) { if (VDBG) log("areAllApplicationsReady: return false"); return false; } } + if (VDBG) { log("areAllApplicationsReady: outside loop, return " + (mUiccApplication != null)); } @@ -991,7 +1013,7 @@ public class UiccProfile extends IccCard { private boolean areAllRecordsLoaded() { for (UiccCardApplication app : mUiccApplications) { - if (app != null && isSupportedApplication(app)) { + if (app != null && isSupportedApplication(app) && !app.isAppIgnored()) { IccRecords ir = app.getIccRecords(); if (ir == null || !ir.isLoaded()) { if (VDBG) log("areAllRecordsLoaded: return false"); diff --git a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccProfileTest.java b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccProfileTest.java index 0ae5531824..1c46367538 100644 --- a/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccProfileTest.java +++ b/tests/telephonytests/src/com/android/internal/telephony/uicc/UiccProfileTest.java @@ -40,6 +40,7 @@ import android.telephony.CarrierConfigManager; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.TelephonyTest; import com.android.internal.telephony.cat.CatService; +import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState; import org.junit.After; import org.junit.Before; @@ -388,6 +389,45 @@ public class UiccProfileTest extends TelephonyTest { @Test @SmallTest + public void testUpdateUiccProfileApplicationWithDuplicateApps() { + /* update app status and index */ + IccCardApplicationStatus umtsApp = composeUiccApplicationStatus( + IccCardApplicationStatus.AppType.APPTYPE_USIM, + IccCardApplicationStatus.AppState.APPSTATE_READY, "0xA2"); + IccCardApplicationStatus imsApp = composeUiccApplicationStatus( + IccCardApplicationStatus.AppType.APPTYPE_ISIM, + IccCardApplicationStatus.AppState.APPSTATE_READY, "0xA1"); + IccCardApplicationStatus unknownApp = composeUiccApplicationStatus( + IccCardApplicationStatus.AppType.APPTYPE_UNKNOWN, + IccCardApplicationStatus.AppState.APPSTATE_UNKNOWN, "0xA2"); + IccCardApplicationStatus umtsAppDup = composeUiccApplicationStatus( + IccCardApplicationStatus.AppType.APPTYPE_USIM, + AppState.APPSTATE_DETECTED, "0xA2"); + mIccCardStatus.mApplications = new IccCardApplicationStatus[]{imsApp, umtsApp, unknownApp, + umtsAppDup}; + mIccCardStatus.mCdmaSubscriptionAppIndex = -1; + mIccCardStatus.mImsSubscriptionAppIndex = 0; + mIccCardStatus.mGsmUmtsSubscriptionAppIndex = 1; + Message mProfileUpdate = mHandler.obtainMessage(UICCPROFILE_UPDATE_APPLICATION_EVENT); + setReady(false); + mProfileUpdate.sendToTarget(); + + waitUntilReady(); + + /* wait for the carrier privilege rules to be loaded */ + waitForMs(50); + assertEquals(4, mUiccProfile.getNumApplications()); + + mUiccProfile.mHandler.sendMessage( + mUiccProfile.mHandler.obtainMessage(UiccProfile.EVENT_APP_READY)); + waitForMs(SCARY_SLEEP_MS); + // state is loaded as all records are loaded right away as SimulatedCommands returns + // response for them right away. Ideally applications and records should be mocked. + assertEquals(State.LOADED, mUiccProfile.getState()); + } + + @Test + @SmallTest public void testUpdateUiccProfileApplicationNoApplication() { mIccCardStatus.mApplications = new IccCardApplicationStatus[]{}; mIccCardStatus.mCdmaSubscriptionAppIndex = -1; |