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

Commit 87155f00 authored by Brad Ebinger's avatar Brad Ebinger Committed by Gerrit Code Review
Browse files

Merge "If FEATURE_TELEPHONY_IMS is not available, don't spin up IMS"

parents 4a27d8b5 c3883c21
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -603,8 +603,8 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
            if (imsManager != null && !imsManager.isDynamicBinding()) {
            if (imsManager != null && !imsManager.isDynamicBinding()) {
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP);
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP);
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN);
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN);
            }
                mContext.registerReceiver(mImsIntentReceiver, filter);
                mContext.registerReceiver(mImsIntentReceiver, filter);
            }


            // Monitor IMS service - but first poll to see if already up (could miss
            // Monitor IMS service - but first poll to see if already up (could miss
            // intent). Also, when using new ImsResolver APIs, the service will be available soon,
            // intent). Also, when using new ImsResolver APIs, the service will be available soon,
+30 −19
Original line number Original line Diff line number Diff line
@@ -149,18 +149,6 @@ public class PhoneFactory {
                   where as in single SIM mode only instance. isMultiSimEnabled() function checks
                   where as in single SIM mode only instance. isMultiSimEnabled() function checks
                   whether it is single SIM or multi SIM mode */
                   whether it is single SIM or multi SIM mode */
                int numPhones = TelephonyManager.getDefault().getPhoneCount();
                int numPhones = TelephonyManager.getDefault().getPhoneCount();
                // Return whether or not the device should use dynamic binding or the static
                // implementation (deprecated)
                boolean isDynamicBinding = sContext.getResources().getBoolean(
                        com.android.internal.R.bool.config_dynamic_bind_ims);
                // Get the package name of the default IMS implementation.
                String defaultImsPackage = sContext.getResources().getString(
                        com.android.internal.R.string.config_ims_package);
                // Start ImsResolver and bind to ImsServices.
                Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage);
                sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones,
                        isDynamicBinding);
                sImsResolver.initPopulateCacheAndStartBind();


                int[] networkModes = new int[numPhones];
                int[] networkModes = new int[numPhones];
                sPhones = new Phone[numPhones];
                sPhones = new Phone[numPhones];
@@ -234,13 +222,32 @@ public class PhoneFactory {
                        BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces);
                        BackgroundThread.get().getLooper(), context, sPhones, sCommandsInterfaces);
                SubscriptionController.getInstance().updatePhonesAvailability(sPhones);
                SubscriptionController.getInstance().updatePhonesAvailability(sPhones);



                // Only bring up IMS if the device supports having an IMS stack.
                if (context.getPackageManager().hasSystemFeature(
                        PackageManager.FEATURE_TELEPHONY_IMS)) {
                    // Return whether or not the device should use dynamic binding or the static
                    // implementation (deprecated)
                    boolean isDynamicBinding = sContext.getResources().getBoolean(
                            com.android.internal.R.bool.config_dynamic_bind_ims);
                    // Get the package name of the default IMS implementation.
                    String defaultImsPackage = sContext.getResources().getString(
                            com.android.internal.R.string.config_ims_package);
                    // Start ImsResolver and bind to ImsServices.
                    Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage);
                    sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones,
                            isDynamicBinding);
                    sImsResolver.initPopulateCacheAndStartBind();
                    // Start monitoring after defaults have been made.
                    // Start monitoring after defaults have been made.
                // Default phone must be ready before ImsPhone is created because ImsService might
                    // Default phone must be ready before ImsPhone is created because ImsService
                // need it when it is being opened. This should initialize multiple ImsPhones for
                    // might need it when it is being opened. This should initialize multiple
                // ImsResolver implementations of ImsService.
                    // ImsPhones for ImsResolver implementations of ImsService.
                    for (int i = 0; i < numPhones; i++) {
                    for (int i = 0; i < numPhones; i++) {
                        sPhones[i].startMonitoringImsService();
                        sPhones[i].startMonitoringImsService();
                    }
                    }
                } else {
                    Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver.");
                }


                ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(
                ITelephonyRegistry tr = ITelephonyRegistry.Stub.asInterface(
                        ServiceManager.getService("telephony.registry"));
                        ServiceManager.getService("telephony.registry"));
@@ -326,7 +333,11 @@ public class PhoneFactory {
        return sSubInfoRecordUpdater;
        return sSubInfoRecordUpdater;
    }
    }


    public static ImsResolver getImsResolver() {
    /**
     * @return The ImsResolver instance or null if IMS is not supported
     * (FEATURE_TELEPHONY_IMS is not defined).
     */
    public static @Nullable ImsResolver getImsResolver() {
        return sImsResolver;
        return sImsResolver;
    }
    }


+12 −5
Original line number Original line Diff line number Diff line
@@ -19,10 +19,12 @@ package android.telephony.ims;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;


import android.os.IBinder;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants;
import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.telephony.ims.aidl.IImsRegistrationCallback;
import android.telephony.ims.stub.ImsRegistrationImplBase;
import android.telephony.ims.stub.ImsRegistrationImplBase;
@@ -40,9 +42,9 @@ import org.mockito.Mock;
public class ImsMmTelManagerTests extends TelephonyTest {
public class ImsMmTelManagerTests extends TelephonyTest {


    @Mock
    @Mock
    IBinder mMockBinder;
    ITelephony.Stub mMockTelephonyInterface;
    @Mock
    @Mock
    ITelephony mMockTelephonyInterface;
    IPackageManager.Stub mMockPackageManager;


    public class LocalCallback extends ImsMmTelManager.RegistrationCallback {
    public class LocalCallback extends ImsMmTelManager.RegistrationCallback {
        int mRegResult = -1;
        int mRegResult = -1;
@@ -56,8 +58,13 @@ public class ImsMmTelManagerTests extends TelephonyTest {
    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        super.setUp("ImsMmTelManagerTests");
        super.setUp("ImsMmTelManagerTests");
        doReturn(mMockTelephonyInterface).when(mMockBinder).queryLocalInterface(anyString());
        doReturn(mMockTelephonyInterface).when(mMockTelephonyInterface).queryLocalInterface(
        mServiceManagerMockedServices.put("phone", mMockBinder);
                anyString());
        doReturn(mMockPackageManager).when(mMockPackageManager).queryLocalInterface(anyString());
        doReturn(true).when(mMockPackageManager).hasSystemFeature(
                eq(PackageManager.FEATURE_TELEPHONY_IMS), anyInt());
        mServiceManagerMockedServices.put("phone", mMockTelephonyInterface);
        mServiceManagerMockedServices.put("package", mMockPackageManager);
    }
    }


    @After
    @After
+9 −0
Original line number Original line Diff line number Diff line
@@ -530,6 +530,7 @@ public class ContextFixture implements TestFixture<Context> {
    private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers =
    private final Multimap<Intent, BroadcastReceiver> mOrderedBroadcastReceivers =
            ArrayListMultimap.create();
            ArrayListMultimap.create();
    private final HashSet<String> mPermissionTable = new HashSet<>();
    private final HashSet<String> mPermissionTable = new HashSet<>();
    private final HashSet<String> mSystemFeatures = new HashSet<>();






@@ -595,6 +596,10 @@ public class ContextFixture implements TestFixture<Context> {
        } catch (NameNotFoundException e) {
        } catch (NameNotFoundException e) {
        }
        }


        doAnswer((Answer<Boolean>)
                invocation -> mSystemFeatures.contains((String) invocation.getArgument(0)))
                .when(mPackageManager).hasSystemFeature(any());

        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
        //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt());
        //doReturn(mBundle).when(mCarrierConfigManager).getConfig(anyInt());
        doReturn(mBundle).when(mCarrierConfigManager).getConfig();
        doReturn(mBundle).when(mCarrierConfigManager).getConfig();
@@ -706,6 +711,10 @@ public class ContextFixture implements TestFixture<Context> {
        }
        }
    }
    }


    public void addSystemFeature(String feature) {
        mSystemFeatures.add(feature);
    }

    private static void logd(String s) {
    private static void logd(String s) {
        Log.d(TAG, s);
        Log.d(TAG, s);
    }
    }
+2 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.pm.PackageManager;
import android.os.IBinder;
import android.os.IBinder;
import android.os.PersistableBundle;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
@@ -95,6 +96,7 @@ public class ImsManagerTest extends TelephonyTest {
        mServiceManagerMockedServices.put("isub", mBinder);
        mServiceManagerMockedServices.put("isub", mBinder);


        doReturn(true).when(mMmTelFeatureConnection).isBinderAlive();
        doReturn(true).when(mMmTelFeatureConnection).isBinderAlive();
        mContextFixture.addSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS);


        mImsManagerInstances.remove(mPhoneId);
        mImsManagerInstances.remove(mPhoneId);


Loading