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

Commit 20ca95b8 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju
Browse files

[Telephony Fix] On Sim Removal clear cache of Data Activity direction

 -  On Sim Removal , due to invoking of notifyDataActivity at
    invalid sub id, DataActivity for a phone id was not
    initialised back to DATA_ACTIVITY_NONE.
    The current changes takes care of notifyDataActivity based
    on the phoneId intead of sub ID . Its Expected on sim removal
    phone id to remain unchanged.

Bug: 284258406
Test: atest TelephonyRegistryTests & atest DefaultPhoneNotifierTests
Test: Device validation b/285299825 & b/285295292
Change-Id: I4eeb4305fbd9dd5b7faf2682701a66611fea03d6
parent 95614c2f
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -125,8 +125,10 @@ public class DefaultPhoneNotifier implements PhoneNotifier {

    @Override
    public void notifyDataActivity(Phone sender) {
        int phoneId = sender.getPhoneId();
        int subId = sender.getSubId();
        mTelephonyRegistryMgr.notifyDataActivityChanged(subId, sender.getDataActivityState());
        mTelephonyRegistryMgr.notifyDataActivityChanged(phoneId, subId,
                sender.getDataActivityState());
    }

    @Override
+18 −3
Original line number Diff line number Diff line
@@ -96,15 +96,30 @@ public class DefaultPhoneNotifierTest extends TelephonyTest {
    public void testNotifyDataActivity() throws Exception {
        //mock data activity state
        doReturn(TelephonyManager.DATA_ACTIVITY_NONE).when(mPhone).getDataActivityState();
        doReturn(PHONE_ID).when(mPhone).getPhoneId();
        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(0),
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(1), eq(0),
                eq(TelephonyManager.DATA_ACTIVITY_NONE));

        doReturn(1).when(mPhone).getSubId();
        doReturn(1/*subId*/).when(mPhone).getSubId();
        doReturn(TelephonyManager.DATA_ACTIVITY_IN).when(mPhone).getDataActivityState();
        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(1),
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(1), eq(1),
                eq(TelephonyManager.DATA_ACTIVITY_IN));

        doReturn(SUB_ID).when(mPhone).getSubId();
        doReturn(TelephonyManager.DATA_ACTIVITY_NONE).when(mPhone).getDataActivityState();
        doReturn(2/*phoneId*/).when(mPhone).getPhoneId();
        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(eq(2), eq(0),
                eq(TelephonyManager.DATA_ACTIVITY_NONE));

        doReturn(1/*subId*/).when(mPhone).getSubId();
        doReturn(TelephonyManager.DATA_ACTIVITY_INOUT).when(mPhone).getDataActivityState();
        mDefaultPhoneNotifierUT.notifyDataActivity(mPhone);
        verify(mTelephonyRegistryManager).notifyDataActivityChanged(
                eq(2), eq(1), eq(TelephonyManager.DATA_ACTIVITY_INOUT));

    }

    @Test @SmallTest
+42 −1
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ public class TelephonyRegistryTest extends TelephonyTest {
    private int mRadioPowerState = RADIO_POWER_UNAVAILABLE;
    private int mDataConnectionState = TelephonyManager.DATA_UNKNOWN;
    private int mNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
    private int mDataActivity = TelephonyManager.DATA_ACTIVITY_NONE;
    private List<PhysicalChannelConfig> mPhysicalChannelConfigs;
    private CellLocation mCellLocation;
    private List<CellInfo> mCellInfo;
@@ -185,7 +186,8 @@ public class TelephonyRegistryTest extends TelephonyTest {
            TelephonyCallback.ServiceStateListener,
            TelephonyCallback.CellInfoListener,
            TelephonyCallback.BarringInfoListener,
            TelephonyCallback.RegistrationFailedListener {
            TelephonyCallback.RegistrationFailedListener,
            TelephonyCallback.DataActivityListener {
        // This class isn't mockable to get invocation counts because the IBinder is null and
        // crashes the TelephonyRegistry. Make a cheesy verify(times()) alternative.
        public AtomicInteger invocationCount = new AtomicInteger(0);
@@ -268,6 +270,11 @@ public class TelephonyRegistryTest extends TelephonyTest {
            mCellIdentityForRegiFail = cellIdentity;
            mRegistrationFailReason = causeCode;
        }

        public void onDataActivity(@Annotation.DataActivityType int direction) {
            invocationCount.incrementAndGet();
            mDataActivity = direction;
        }
    }

    private void addTelephonyRegistryService() {
@@ -1490,4 +1497,38 @@ public class TelephonyRegistryTest extends TelephonyTest {
        assertEquals(2, mTelephonyCallback.invocationCount.get());
        assertEquals(mCellInfo, dummyCellInfo);
    }

    @Test
    public void testNotifyDataActivityForSubscriber() {
        final int subId = 1;
        int[] events = {TelephonyCallback.EVENT_DATA_ACTIVITY_CHANGED};
        doReturn(mMockSubInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
        doReturn(0/*slotIndex*/).when(mMockSubInfo).getSimSlotIndex();

        assertEquals(TelephonyManager.DATA_ACTIVITY_NONE, mDataActivity);
        mTelephonyRegistry.listenWithEventList(false, false, subId, mContext.getOpPackageName(),
                mContext.getAttributionTag(), mTelephonyCallback.callback, events, true);

        mTelephonyRegistry.notifyDataActivityForSubscriber(0/*phoneId*/, subId,
                TelephonyManager.DATA_ACTIVITY_INOUT);
        processAllMessages();
        assertEquals(TelephonyManager.DATA_ACTIVITY_INOUT, mDataActivity);
    }

    @Test
    public void testNotifyDataActivityForSubscriberForInvalidSubId() {
        final int subId = INVALID_SUBSCRIPTION_ID;
        int[] events = {TelephonyCallback.EVENT_DATA_ACTIVITY_CHANGED};
        doReturn(mMockSubInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
        doReturn(0/*slotIndex*/).when(mMockSubInfo).getSimSlotIndex();

        assertEquals(TelephonyManager.DATA_ACTIVITY_NONE, mDataActivity);
        mTelephonyRegistry.listenWithEventList(false, false, subId, mContext.getOpPackageName(),
                mContext.getAttributionTag(), mTelephonyCallback.callback, events, true);

        mTelephonyRegistry.notifyDataActivityForSubscriber(0/*phoneId*/, subId,
                TelephonyManager.DATA_ACTIVITY_OUT);
        processAllMessages();
        assertEquals(TelephonyManager.DATA_ACTIVITY_OUT, mDataActivity);
    }
}