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

Commit 7eba6a8c authored by Brad Ebinger's avatar Brad Ebinger Committed by android-build-merger
Browse files

Remove compat version of ImsService binding am: f07772fa

am: e7667067

Change-Id: I391f9aa97c6f2b08405e9be070f7006f19712887
parents 975aad9f e7667067
Loading
Loading
Loading
Loading
+8 −74
Original line number Original line Diff line number Diff line
@@ -19,10 +19,8 @@ package com.android.internal.telephony;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.UnsupportedAppUsage;
import android.annotation.UnsupportedAppUsage;
import android.app.BroadcastOptions;
import android.app.BroadcastOptions;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.net.LinkProperties;
import android.net.LinkProperties;
import android.net.NetworkCapabilities;
import android.net.NetworkCapabilities;
@@ -116,33 +114,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {


    protected final int USSD_MAX_QUEUE = 10;
    protected final int USSD_MAX_QUEUE = 10;


    private BroadcastReceiver mImsIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Rlog.d(LOG_TAG, "mImsIntentReceiver: action " + intent.getAction());
            if (intent.hasExtra(ImsManager.EXTRA_PHONE_ID)) {
                int extraPhoneId = intent.getIntExtra(ImsManager.EXTRA_PHONE_ID,
                        SubscriptionManager.INVALID_PHONE_INDEX);
                Rlog.d(LOG_TAG, "mImsIntentReceiver: extraPhoneId = " + extraPhoneId);
                if (extraPhoneId == SubscriptionManager.INVALID_PHONE_INDEX ||
                        extraPhoneId != getPhoneId()) {
                    return;
                }
            }

            synchronized (Phone.lockForRadioTechnologyChange) {
                if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_UP)) {
                    mImsServiceReady = true;
                    updateImsPhone();
                    ImsManager.getInstance(mContext, mPhoneId).updateImsServiceConfig(false);
                } else if (intent.getAction().equals(ImsManager.ACTION_IMS_SERVICE_DOWN)) {
                    mImsServiceReady = false;
                    updateImsPhone();
                }
            }
        }
    };

    // Key used to read and write the saved network selection numeric value
    // Key used to read and write the saved network selection numeric value
    public static final String NETWORK_SELECTION_KEY = "network_selection_key";
    public static final String NETWORK_SELECTION_KEY = "network_selection_key";
    // Key used to read and write the saved network selection operator name
    // Key used to read and write the saved network selection operator name
@@ -323,7 +294,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    protected int mPhoneId;
    protected int mPhoneId;


    private boolean mImsServiceReady = false;
    @UnsupportedAppUsage
    @UnsupportedAppUsage
    protected Phone mImsPhone = null;
    protected Phone mImsPhone = null;


@@ -586,34 +556,20 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    }
    }


    /**
    /**
     * Start listening for IMS service UP/DOWN events. If using the new ImsResolver APIs, we should
     * Start setup of ImsPhone, which will start trying to connect to the ImsResolver. Will not be
     * always be setting up ImsPhones.
     * called if this device does not support FEATURE_IMS_TELEPHONY.
     */
     */
    public void startMonitoringImsService() {
    public void createImsPhone() {
        if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) {
        if (getPhoneType() == PhoneConstants.PHONE_TYPE_SIP) {
            return;
            return;
        }
        }


        synchronized(Phone.lockForRadioTechnologyChange) {
        synchronized(Phone.lockForRadioTechnologyChange) {
            IntentFilter filter = new IntentFilter();
            if (mImsPhone == null) {
            ImsManager imsManager = ImsManager.getInstance(mContext, getPhoneId());
                mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this);
            // Don't listen to deprecated intents using the new dynamic binding.
                CallManager.getInstance().registerPhone(mImsPhone);
            if (imsManager != null && !imsManager.isDynamicBinding()) {
                mImsPhone.registerForSilentRedial(
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_UP);
                        this, EVENT_INITIATE_SILENT_REDIAL, null);
                filter.addAction(ImsManager.ACTION_IMS_SERVICE_DOWN);
                mContext.registerReceiver(mImsIntentReceiver, filter);
            }

            // 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,
            // so start trying to bind.
            if (imsManager != null) {
                // If it is dynamic binding, kick off ImsPhone creation now instead of waiting for
                // the service to be available.
                if (imsManager.isDynamicBinding() || imsManager.isServiceAvailable()) {
                    mImsServiceReady = true;
                    updateImsPhone();
                }
            }
            }
        }
        }
    }
    }
@@ -3461,28 +3417,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
    public void dispose() {
    public void dispose() {
    }
    }


    private void updateImsPhone() {
        Rlog.d(LOG_TAG, "updateImsPhone"
                + " mImsServiceReady=" + mImsServiceReady);

        if (mImsServiceReady && (mImsPhone == null)) {
            mImsPhone = PhoneFactory.makeImsPhone(mNotifier, this);
            CallManager.getInstance().registerPhone(mImsPhone);
            mImsPhone.registerForSilentRedial(
                    this, EVENT_INITIATE_SILENT_REDIAL, null);
        } else if (!mImsServiceReady && (mImsPhone != null)) {
            CallManager.getInstance().unregisterPhone(mImsPhone);
            mImsPhone.unregisterForSilentRedial(this);

            mImsPhone.dispose();
            // Potential GC issue if someone keeps a reference to ImsPhone.
            // However: this change will make sure that such a reference does
            // not access functions through NULL pointer.
            //mImsPhone.removeReferences();
            mImsPhone = null;
        }
    }

    /**
    /**
     * Dials a number.
     * Dials a number.
     *
     *
+3 −8
Original line number Original line Diff line number Diff line
@@ -211,24 +211,19 @@ public class PhoneFactory {
                // Only bring up IMS if the device supports having an IMS stack.
                // Only bring up IMS if the device supports having an IMS stack.
                if (context.getPackageManager().hasSystemFeature(
                if (context.getPackageManager().hasSystemFeature(
                        PackageManager.FEATURE_TELEPHONY_IMS)) {
                        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.
                    // Get the package name of the default IMS implementation.
                    String defaultImsPackage = sContext.getResources().getString(
                    String defaultImsPackage = sContext.getResources().getString(
                            com.android.internal.R.string.config_ims_package);
                            com.android.internal.R.string.config_ims_package);
                    // Start ImsResolver and bind to ImsServices.
                    // Start ImsResolver and bind to ImsServices.
                    Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage);
                    Rlog.i(LOG_TAG, "ImsResolver: defaultImsPackage: " + defaultImsPackage);
                    sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones,
                    sImsResolver = new ImsResolver(sContext, defaultImsPackage, numPhones);
                            isDynamicBinding);
                    sImsResolver.initialize();
                    sImsResolver.initialize();
                    // 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
                    // Default phone must be ready before ImsPhone is created because ImsService
                    // might need it when it is being opened. This should initialize multiple
                    // might need it when it is being opened. This should initialize multiple
                    // ImsPhones for 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].createImsPhone();
                    }
                    }
                } else {
                } else {
                    Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver.");
                    Rlog.i(LOG_TAG, "IMS is not supported on this device, skipping ImsResolver.");
@@ -284,7 +279,7 @@ public class PhoneFactory {
                sPhones[i] = createPhone(context, i);
                sPhones[i] = createPhone(context, i);
                if (context.getPackageManager().hasSystemFeature(
                if (context.getPackageManager().hasSystemFeature(
                        PackageManager.FEATURE_TELEPHONY_IMS)) {
                        PackageManager.FEATURE_TELEPHONY_IMS)) {
                    sPhones[i].startMonitoringImsService();
                    sPhones[i].createImsPhone();
                }
                }
                sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory(
                sTelephonyNetworkFactories[i] = new TelephonyNetworkFactory(
                        Looper.myLooper(), sPhones[i]);
                        Looper.myLooper(), sPhones[i]);
+15 −61
Original line number Original line Diff line number Diff line
@@ -359,21 +359,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
                }
                }
            };
            };


    private ImsServiceControllerFactory mImsServiceControllerFactoryStaticBindingCompat =
            new ImsServiceControllerFactory() {
                @Override
                public String getServiceInterface() {
                    // The static method of binding does not use service interfaces.
                    return null;
                }

                @Override
                public ImsServiceController create(Context context, ComponentName componentName,
                        ImsServiceController.ImsServiceControllerCallbacks callbacks) {
                    return new ImsServiceControllerStaticCompat(context, componentName, callbacks);
                }
            };

    private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory =
    private ImsDynamicQueryManagerFactory mDynamicQueryManagerFactory =
            ImsServiceFeatureQueryManager::new;
            ImsServiceFeatureQueryManager::new;


@@ -388,7 +373,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    // ImsServiceController callbacks.
    // ImsServiceController callbacks.
    private final Object mBoundServicesLock = new Object();
    private final Object mBoundServicesLock = new Object();
    private final int mNumSlots;
    private final int mNumSlots;
    private final boolean mIsDynamicBinding;
    // Package name of the default device service.
    // Package name of the default device service.
    private String mDeviceService;
    private String mDeviceService;
    // Persistent Logging
    // Persistent Logging
@@ -512,22 +496,13 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>();
    private Map<ComponentName, ImsServiceInfo> mInstalledServicesCache = new HashMap<>();
    // not locked, only accessed on a handler thread.
    // not locked, only accessed on a handler thread.
    private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>();
    private Map<ComponentName, ImsServiceController> mActiveControllers = new HashMap<>();
    // Only used as the Component name for legacy ImsServices that did not use dynamic binding.
    private final ComponentName mStaticComponent;
    private ImsServiceFeatureQueryManager mFeatureQueryManager;
    private ImsServiceFeatureQueryManager mFeatureQueryManager;


    public ImsResolver(Context context, String defaultImsPackageName, int numSlots,
    public ImsResolver(Context context, String defaultImsPackageName, int numSlots) {
            boolean isDynamicBinding) {
        mContext = context;
        mContext = context;
        mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/);
        mReceiverContext = context.createContextAsUser(UserHandle.ALL, 0 /*flags*/);
        mDeviceService = defaultImsPackageName;
        mDeviceService = defaultImsPackageName;
        mNumSlots = numSlots;
        mNumSlots = numSlots;
        mIsDynamicBinding = isDynamicBinding;
        mStaticComponent = new ComponentName(mContext, ImsResolver.class);
        if (!mIsDynamicBinding) {
            Log.i(TAG, "ImsResolver initialized with static binding.");
            mDeviceService = mStaticComponent.getPackageName();
        }
        mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
        mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
                Context.CARRIER_CONFIG_SERVICE);
                Context.CARRIER_CONFIG_SERVICE);
        mCarrierServices = new String[numSlots];
        mCarrierServices = new String[numSlots];
@@ -535,8 +510,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new)
        mBoundImsServicesByFeature = Stream.generate(SparseArray<ImsServiceController>::new)
                .limit(mNumSlots).collect(Collectors.toList());
                .limit(mNumSlots).collect(Collectors.toList());


        // Only register for Package/CarrierConfig updates if dynamic binding.
        if(mIsDynamicBinding) {
        IntentFilter appChangedFilter = new IntentFilter();
        IntentFilter appChangedFilter = new IntentFilter();
        appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        appChangedFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
        appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        appChangedFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
@@ -548,7 +521,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter(
        mReceiverContext.registerReceiver(mBootCompleted, new IntentFilter(
                Intent.ACTION_BOOT_COMPLETED));
                Intent.ACTION_BOOT_COMPLETED));
    }
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) {
    public void setTelephonyManagerProxy(TelephonyManagerProxy proxy) {
@@ -1331,27 +1303,10 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
    // get all packages that support ImsServices.
    // get all packages that support ImsServices.
    private List<ImsServiceInfo> getImsServiceInfo(String packageName) {
    private List<ImsServiceInfo> getImsServiceInfo(String packageName) {
        List<ImsServiceInfo> infos = new ArrayList<>();
        List<ImsServiceInfo> infos = new ArrayList<>();
        if (!mIsDynamicBinding) {
            // always return the same ImsService info.
            infos.addAll(getStaticImsService());
        } else {
        // Search for Current ImsService implementations
        // Search for Current ImsService implementations
        infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory));
        infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactory));
        // Search for compat ImsService Implementations
        // Search for compat ImsService Implementations
        infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat));
        infos.addAll(searchForImsServices(packageName, mImsServiceControllerFactoryCompat));
        }
        return infos;
    }

    private List<ImsServiceInfo> getStaticImsService() {
        List<ImsServiceInfo> infos = new ArrayList<>();

        ImsServiceInfo info = new ImsServiceInfo(mNumSlots);
        info.name = mStaticComponent;
        info.controllerFactory = mImsServiceControllerFactoryStaticBindingCompat;
        info.addFeatureForAllSlots(ImsFeature.FEATURE_EMERGENCY_MMTEL);
        info.addFeatureForAllSlots(ImsFeature.FEATURE_MMTEL);
        infos.add(info);
        return infos;
        return infos;
    }
    }


@@ -1428,7 +1383,6 @@ public class ImsResolver implements ImsServiceController.ImsServiceControllerCal
        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
        IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
        pw.println("ImsResolver:");
        pw.println("ImsResolver:");
        pw.increaseIndent();
        pw.increaseIndent();
        pw.println("mIsDynamicBinding = " + mIsDynamicBinding);
        pw.println("mDeviceService = " + mDeviceService);
        pw.println("mDeviceService = " + mDeviceService);
        pw.println("mCarrierServices: ");
        pw.println("mCarrierServices: ");
        pw.increaseIndent();
        pw.increaseIndent();
+1 −10
Original line number Original line Diff line number Diff line
@@ -376,7 +376,7 @@ public class ImsServiceController {
                mLocalLog.log("binding " + imsFeatureSet);
                mLocalLog.log("binding " + imsFeatureSet);
                Log.i(LOG_TAG, "Binding ImsService:" + mComponentName);
                Log.i(LOG_TAG, "Binding ImsService:" + mComponentName);
                try {
                try {
                    boolean bindSucceeded = startBindToService(imsServiceIntent,
                    boolean bindSucceeded = mContext.bindService(imsServiceIntent,
                            mImsServiceConnection, serviceFlags);
                            mImsServiceConnection, serviceFlags);
                    if (!bindSucceeded) {
                    if (!bindSucceeded) {
                        mLocalLog.log("    binding failed, retrying in "
                        mLocalLog.log("    binding failed, retrying in "
@@ -400,15 +400,6 @@ public class ImsServiceController {
        }
        }
    }
    }


    /**
     * Starts the bind to the ImsService. Overridden by subclasses that need to access the service
     * in a different fashion.
     */
    protected boolean startBindToService(Intent intent, ImsServiceConnection connection,
            int flags) {
        return mContext.bindService(intent, connection, flags);
    }

    /**
    /**
     * Calls {@link IImsServiceController#removeImsFeature} on all features that the
     * Calls {@link IImsServiceController#removeImsFeature} on all features that the
     * ImsService supports and then unbinds the service.
     * ImsService supports and then unbinds the service.
+1 −1
Original line number Original line Diff line number Diff line
@@ -171,7 +171,7 @@ public class ImsServiceControllerCompat extends ImsServiceController {
        return mServiceController != null;
        return mServiceController != null;
    }
    }


    protected MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c)
    private MmTelInterfaceAdapter getInterface(int slotId, IImsFeatureStatusCallback c)
            throws RemoteException {
            throws RemoteException {
        IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c);
        IImsMMTelFeature feature = mServiceController.createMMTelFeature(slotId, c);
        if (feature == null) {
        if (feature == null) {
Loading