Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 232eaaa0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Ignore the duplicate app"

parents 76c9a2fd b0e56639
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -73,6 +73,9 @@ public class UiccCardApplication {
    private boolean       mDesiredFdnEnabled;
    private boolean       mDesiredFdnEnabled;
    private boolean       mIccLockEnabled;
    private boolean       mIccLockEnabled;
    private boolean       mDesiredPinLocked;
    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 boolean       mIccFdnAvailable = true; // Default is enabled.


    private CommandsInterface mCi;
    private CommandsInterface mCi;
@@ -101,6 +104,7 @@ public class UiccCardApplication {
        mPin1Replaced = (as.pin1_replaced != 0);
        mPin1Replaced = (as.pin1_replaced != 0);
        mPin1State = as.pin1;
        mPin1State = as.pin1;
        mPin2State = as.pin2;
        mPin2State = as.pin2;
        mIgnoreApp = false;


        mContext = c;
        mContext = c;
        mCi = ci;
        mCi = ci;
@@ -874,6 +878,14 @@ public class UiccCardApplication {
        return mUiccProfile.getPhoneId();
        return mUiccProfile.getPhoneId();
    }
    }


    public boolean isAppIgnored() {
        return mIgnoreApp;
    }

    public void setAppIgnoreState(boolean ignore) {
        mIgnoreApp = ignore;
    }

    protected UiccProfile getUiccProfile() {
    protected UiccProfile getUiccProfile() {
        return mUiccProfile;
        return mUiccProfile;
    }
    }
+24 −2
Original line number Original line Diff line number Diff line
@@ -487,6 +487,7 @@ public class UiccProfile extends IccCard {
                setExternalState(IccCardConstants.State.NOT_READY);
                setExternalState(IccCardConstants.State.NOT_READY);
                break;
                break;
            case APPSTATE_READY:
            case APPSTATE_READY:
                checkAndUpdateIfAnyAppToBeIgnored();
                if (areAllApplicationsReady()) {
                if (areAllApplicationsReady()) {
                    if (areAllRecordsLoaded() && areCarrierPriviligeRulesLoaded()) {
                    if (areAllRecordsLoaded() && areCarrierPriviligeRulesLoaded()) {
                        if (VDBG) log("updateExternalState: setting state to LOADED");
                        if (VDBG) log("updateExternalState: setting state to LOADED");
@@ -966,13 +967,34 @@ public class UiccProfile extends IccCard {
        return true;
        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) {
        for (UiccCardApplication app : mUiccApplications) {
            if (app != null && isSupportedApplication(app) && !app.isReady()) {
            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");
                if (VDBG) log("areAllApplicationsReady: return false");
                return false;
                return false;
            }
            }
        }
        }

        if (VDBG) {
        if (VDBG) {
            log("areAllApplicationsReady: outside loop, return " + (mUiccApplication != null));
            log("areAllApplicationsReady: outside loop, return " + (mUiccApplication != null));
        }
        }
@@ -981,7 +1003,7 @@ public class UiccProfile extends IccCard {


    private boolean areAllRecordsLoaded() {
    private boolean areAllRecordsLoaded() {
        for (UiccCardApplication app : mUiccApplications) {
        for (UiccCardApplication app : mUiccApplications) {
            if (app != null && isSupportedApplication(app)) {
            if (app != null && isSupportedApplication(app) && !app.isAppIgnored()) {
                IccRecords ir = app.getIccRecords();
                IccRecords ir = app.getIccRecords();
                if (ir == null || !ir.isLoaded()) {
                if (ir == null || !ir.isLoaded()) {
                    if (VDBG) log("areAllRecordsLoaded: return false");
                    if (VDBG) log("areAllRecordsLoaded: return false");
+79 −0
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.CarrierConfigManager;
import com.android.internal.telephony.IccCardConstants.State;
import com.android.internal.telephony.IccCardConstants.State;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.cat.CatService;
import com.android.internal.telephony.cat.CatService;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
@@ -362,6 +363,84 @@ public class UiccProfileTest extends TelephonyTest {
        assertEquals(State.LOADED, mUiccProfile.getState());
        assertEquals(State.LOADED, mUiccProfile.getState());
    }
    }


    @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 testUpdateUiccProfileApplicationWithDuplicateAppsInDifferentOrder() {
        /* 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[]{umtsAppDup, imsApp, umtsApp,
                unknownApp};
        mIccCardStatus.mCdmaSubscriptionAppIndex = -1;
        mIccCardStatus.mImsSubscriptionAppIndex = 0;
        mIccCardStatus.mGsmUmtsSubscriptionAppIndex = 2;
        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
    @Test
    @SmallTest
    @SmallTest
    public void testUpdateUiccProfileApplicationNoApplication() {
    public void testUpdateUiccProfileApplicationNoApplication() {