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

Commit 73a087f5 authored by Nagendra Prasad Nagarle Basavaraju's avatar Nagendra Prasad Nagarle Basavaraju Committed by Cherrypicker Worker
Browse files

Fix NPE at DataNetworkController

Bug: 346708541
Test: atest and device test
Flag: EXEMPT bugfix
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:7d0fbff5cb659f17fd75307f77d54b8efc346399)
Merged-In: Ie46dc1bc145bbb8664655c27f5825b5c9f7fdc5b
Change-Id: Ie46dc1bc145bbb8664655c27f5825b5c9f7fdc5b
parent b4cd5c96
Loading
Loading
Loading
Loading
+62 −46
Original line number Diff line number Diff line
@@ -2647,7 +2647,7 @@ public class DataNetworkController extends Handler {
                        .unregisterImsRegistrationCallback(oldCallback);
            }
            log("Successfully unregistered " + DataUtils.imsFeatureToString(imsFeature)
                    + " registration state. sudId=" + subId);
                    + " registration state. subId=" + subId);
            mImsFeatureRegistrationCallbacks.remove(imsFeature);
        }
    }
@@ -2658,6 +2658,7 @@ public class DataNetworkController extends Handler {
     * @param subId Subscription index.
     */
    private void registerImsStateCallback(int subId) {
        if (isImsSupportedOnDevice()) {
            Function<Integer, ImsStateCallback> imsFeatureStateCallbackFactory =
                    imsFeature -> new ImsStateCallback() {
                        @Override
@@ -2695,6 +2696,9 @@ public class DataNetworkController extends Handler {
            } catch (ImsException e) {
                loge("Exception when registering IMS state callback. " + e);
            }
        } else {
            log("IMS is not supported on this device, skipping registerImsStateCallback");
        }
    }

    /**
@@ -2703,6 +2707,7 @@ public class DataNetworkController extends Handler {
     * @param subId Subscription index.
     */
    private void unregisterImsStateCallbacks(int subId) {
        if (isImsSupportedOnDevice()) {
            ImsStateCallback callback = mImsStateCallbacks.get(ImsFeature.FEATURE_MMTEL);
            if (callback != null) {
                mImsManager.getImsMmTelManager(subId).unregisterImsStateCallback(callback);
@@ -2716,6 +2721,17 @@ public class DataNetworkController extends Handler {
                mImsStateCallbacks.remove(ImsFeature.FEATURE_RCS);
                log("Unregister RCS state on sub " + subId);
            }
        } else {
            log("IMS is not supported on this device, skipping unregisterImsStateCallbacks");
        }
    }

    /**
     * called to check if FEATURE_TELEPHONY_IMS feature is available
     */
    private boolean isImsSupportedOnDevice() {
        return mPhone.getContext().getPackageManager()
                .hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS);
    }

    /** Called when subscription info changed. */
+5 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.annotation.NonNull;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.InetAddresses;
import android.net.LinkAddress;
@@ -172,6 +173,7 @@ public class DataNetworkControllerTest extends TelephonyTest {
    private RegistrationCallback mMmtelRegCallback;
    private RegistrationCallback mRcsRegCallback;
    private SubscriptionInfo mMockSubInfo;
    private PackageManager mMockPackageManager;

    private int mNetworkRequestId = 0;

@@ -863,6 +865,7 @@ public class DataNetworkControllerTest extends TelephonyTest {
        mMockedDataNetworkControllerCallback = Mockito.mock(DataNetworkControllerCallback.class);
        mMockedDataRetryManagerCallback = Mockito.mock(DataRetryManagerCallback.class);
        mMockSubInfo = Mockito.mock(SubscriptionInfo.class);
        mMockPackageManager = Mockito.mock(PackageManager.class);
        when(mTelephonyComponentFactory.makeDataSettingsManager(any(Phone.class),
                any(DataNetworkController.class), any(FeatureFlags.class), any(Looper.class),
                any(DataSettingsManager.DataSettingsManagerCallback.class))).thenCallRealMethod();
@@ -892,6 +895,8 @@ public class DataNetworkControllerTest extends TelephonyTest {
        doReturn(true).when(mFeatureFlags).satelliteInternet();
        doReturn(true).when(mFeatureFlags)
                .ignoreExistingNetworksForInternetAllowedChecking();
        when(mContext.getPackageManager()).thenReturn(mMockPackageManager);
        doReturn(true).when(mMockPackageManager).hasSystemFeature(anyString());

        List<SubscriptionInfo> infoList = new ArrayList<>();
        infoList.add(mMockSubInfo);