aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSooraj Sasindran <sasindran@google.com>2018-06-28 14:01:21 -0700
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-06-30 04:27:14 +0000
commit309d5afed9da8bb06de355561287dbb6b4274031 (patch)
treecc1220043780f84c0f9670e279fd4267155e3172
parent8544741073a2a95f261b80c6a0d8b2c2e4808c3d (diff)
downloadtelephony-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)
-rw-r--r--src/java/com/android/internal/telephony/uicc/UiccCardApplication.java12
-rw-r--r--src/java/com/android/internal/telephony/uicc/UiccProfile.java26
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/uicc/UiccProfileTest.java40
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;