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

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

Merge "Fix GsmCdmaPhone.getIccCard() to never return null."

parents dbf3f7a5 28eb337c
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -382,10 +382,6 @@ public class IccCardProxy extends Handler implements IccCard {
    }

    private void registerUiccCardEvents() {
        if (mUiccSlot != null) {
            // todo: reregistration is not needed unless slot mapping changes
            mUiccSlot.registerForAbsent(this, EVENT_ICC_ABSENT, null);
        }
        if (mUiccApplication != null) {
            mUiccApplication.registerForReady(this, EVENT_APP_READY, null);
        }
@@ -399,7 +395,6 @@ public class IccCardProxy extends Handler implements IccCard {
    }

    private void unregisterUiccCardEvents() {
        if (mUiccSlot != null) mUiccSlot.unregisterForAbsent(this);
        if (mUiccCard != null) mUiccCard.unregisterForCarrierPrivilegeRulesLoaded(this);
        if (mUiccApplication != null) {
            mUiccApplication.unregisterForReady(this);
+3 −39
Original line number Diff line number Diff line
@@ -26,8 +26,6 @@ import android.content.res.Resources;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.Registrant;
import android.os.RegistrantList;
import android.telephony.Rlog;
import android.util.LocalLog;
import android.view.WindowManager;
@@ -62,9 +60,6 @@ public class UiccSlot extends Handler {
    private String mIccId;
    private Integer mPhoneId = null;

    // todo: remove if this is not needed
    private RegistrantList mAbsentRegistrants = new RegistrantList();

    private static final int EVENT_CARD_REMOVED = 13;
    private static final int EVENT_CARD_ADDED = 14;

@@ -98,7 +93,6 @@ public class UiccSlot extends Handler {
                // No notifications while radio is off or we just powering up
                if (radioState == RadioState.RADIO_ON && mLastRadioState == RadioState.RADIO_ON) {
                    if (DBG) log("update: notify card removed");
                    mAbsentRegistrants.notifyRegistrants();
                    sendMessage(obtainMessage(EVENT_CARD_REMOVED, null));
                }

@@ -147,11 +141,10 @@ public class UiccSlot extends Handler {
            if (iss.slotState == IccSlotStatus.SlotState.SLOTSTATE_INACTIVE) {
                if (mActive) {
                    mActive = false;
                    // treat as radio state unavailable
                    onRadioStateUnavailable();
                    // set mPhoneId to null only after sim state changed broadcast is sent as it
                    // needs the phoneId. The broadcast is sent from onRadioStateUnavailable()
                    mLastRadioState = RadioState.RADIO_UNAVAILABLE;
                    mPhoneId = null;
                    if (mUiccCard != null) mUiccCard.dispose();
                    mUiccCard = null;
                }
                parseAtr(iss.atr);
                mCardState = iss.cardState;
@@ -321,30 +314,6 @@ public class UiccSlot extends Handler {
        mLastRadioState = RadioState.RADIO_UNAVAILABLE;
    }

    /**
     * Notifies handler of any transition into State.ABSENT
     */
    public void registerForAbsent(Handler h, int what, Object obj) {
        synchronized (mLock) {
            Registrant r = new Registrant(h, what, obj);

            mAbsentRegistrants.add(r);

            if (mCardState == CardState.CARDSTATE_ABSENT) {
                r.notifyRegistrant();
            }
        }
    }

    /**
     * Unregister a handler for card absent notification
     */
    public void unregisterForAbsent(Handler h) {
        synchronized (mLock) {
            mAbsentRegistrants.remove(h);
        }
    }

    private void log(String msg) {
        Rlog.d(TAG, msg);
    }
@@ -365,11 +334,6 @@ public class UiccSlot extends Handler {
        pw.println(" mCi=" + mCi);
        pw.println(" mActive=" + mActive);
        pw.println(" mLastRadioState=" + mLastRadioState);
        pw.println(" mAbsentRegistrants: size=" + mAbsentRegistrants.size());
        for (int i = 0; i < mAbsentRegistrants.size(); i++) {
            pw.println("  mAbsentRegistrants[" + i + "]="
                    + ((Registrant) mAbsentRegistrants.get(i)).getHandler());
        }
        pw.println(" mCardState=" + mCardState);
        if (mUiccCard != null) {
            pw.println(" mUiccCard=" + mUiccCard);
+0 −34
Original line number Diff line number Diff line
@@ -15,14 +15,10 @@
 */
package com.android.internal.telephony.uicc;

import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.verify;

import android.os.Handler;
import android.os.HandlerThread;
@@ -34,7 +30,6 @@ import com.android.internal.telephony.TelephonyTest;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;

public class UiccSlotTest extends TelephonyTest {
@@ -98,35 +93,6 @@ public class UiccSlotTest extends TelephonyTest {
        super.tearDown();
    }


    @Test @SmallTest
    public void testCardAbsentListener() {
        mUiccSlot.registerForAbsent(mMockedHandler, UICCCARD_ABSENT, null);
        /* assume hotswap capable, avoid bootup on card removal */
        mContextFixture.putBooleanResource(com.android.internal.R.bool.config_hotswapCapable, true);
        mSimulatedCommands.setRadioPower(true, null);

        /* Mock Card State transition from card_present to card_absent */
        logd("UICC Card Present update");
        mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_PRESENT;
        // mUiccSlot.update() needs to be called from the handler thread because it creates UiccCard
        Message mCardUpdate = mTestHandler.obtainMessage(UICCCARD_UPDATE_CARD_STATE_EVENT);
        setReady(false);
        mCardUpdate.sendToTarget();
        waitUntilReady();

        logd("UICC Card absent update");
        mIccCardStatus.mCardState = IccCardStatus.CardState.CARDSTATE_ABSENT;
        mUiccSlot.update(mSimulatedCommands, mIccCardStatus, 0 /* phoneId */);
        waitForMs(50);

        ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class);
        ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class);
        verify(mMockedHandler, atLeast(1)).sendMessageDelayed(mCaptorMessage.capture(),
                mCaptorLong.capture());
        assertEquals(UICCCARD_ABSENT, mCaptorMessage.getValue().what);
    }

    @Test
    @SmallTest
    public void testUpdateSlotStatus() {