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

Commit 26a0a93d authored by Shishir Agrawal's avatar Shishir Agrawal
Browse files

DctContoller should recreate TelephonyNetworkFactory on phone object update.

Not doing this means that a setup_data_call will not trigger when we change
phone (say from CDMA to GSM). Ideally it should be doing this on DcTracker
object getting created, but since DcTracker is tied to Phone, this approach
should work.

Bug: 18158402
Change-Id: I2ed04f1d7b48081e809925d9fda35062b40955ef
parent 481a66b5
Loading
Loading
Loading
Loading
+49 −47
Original line number Diff line number Diff line
@@ -104,26 +104,63 @@ public class DctController extends Handler {
            loge("updatePhoneObject phone = null");
            return;
        }

        PhoneBase phoneBase = (PhoneBase)phone.getActivePhone();
        if (phoneBase == null) {
            loge("updatePhoneObject phoneBase = null");
            return;
        }

        phoneBase.getServiceStateTracker().registerForDataConnectionAttached(mRspHandler,
                   EVENT_DATA_ATTACHED, null);
        phoneBase.getServiceStateTracker().registerForDataConnectionDetached(mRspHandler,
                   EVENT_DATA_DETACHED, null);

        for (int i = 0; i < mPhoneNum; i++) {
            if((mPhones[i] == phone) && (mNetworkFactory != null) && (mNetworkFactory[i] != null)){
                logd("updatePhoneObject for phone i=" + i);
                ((DctController.TelephonyNetworkFactory)mNetworkFactory[i]).setPhone(phoneBase);
            if (mPhones[i] == phone) {
                updatePhoneBaseForIndex(i, phoneBase);
                break;
            }
        }
    }

    private void updatePhoneBaseForIndex(int index, PhoneBase phoneBase) {
        logd("updatePhoneBaseForIndex for phone index=" + index);

        phoneBase.getServiceStateTracker().registerForDataConnectionAttached(mRspHandler,
                   EVENT_DATA_ATTACHED + index, null);
        phoneBase.getServiceStateTracker().registerForDataConnectionDetached(mRspHandler,
                   EVENT_DATA_DETACHED + index, null);

        ConnectivityManager cm = (ConnectivityManager)mPhones[index].getContext()
            .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (mNetworkFactoryMessenger != null) {
            logd("unregister TelephonyNetworkFactory for phone index=" + index);
            cm.unregisterNetworkFactory(mNetworkFactoryMessenger[index]);
            mNetworkFactoryMessenger[index] = null;
            mNetworkFactory[index] = null;
            mNetworkFilter[index] = null;
        }

        mNetworkFilter[index] = new NetworkCapabilities();
        mNetworkFilter[index].addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_IA);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_RCS);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
        mNetworkFilter[index].addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);

        mNetworkFactory[index] = new TelephonyNetworkFactory(this.getLooper(),
                mPhones[index].getContext(), "TelephonyNetworkFactory", phoneBase,
                mNetworkFilter[index]);
        mNetworkFactory[index].setScoreFilter(50);
        mNetworkFactoryMessenger[index] = new Messenger(mNetworkFactory[index]);
        cm.registerNetworkFactory(mNetworkFactoryMessenger[index], "Telephony");
    }

    private Handler mRspHandler = new Handler() {
        @Override
        public void handleMessage(Message msg){
@@ -196,37 +233,7 @@ public class DctController extends Handler {

            // Register for radio state change
            PhoneBase phoneBase = (PhoneBase)mPhones[i].getActivePhone();

            phoneBase.getServiceStateTracker().registerForDataConnectionAttached(mRspHandler,
                   EVENT_DATA_ATTACHED + i, null);
            phoneBase.getServiceStateTracker().registerForDataConnectionDetached(mRspHandler,
                   EVENT_DATA_DETACHED + i, null);

            ConnectivityManager cm = (ConnectivityManager)mPhones[i].getContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);

            mNetworkFilter[i] = new NetworkCapabilities();
            mNetworkFilter[i].addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_MMS);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_DUN);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_FOTA);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_IMS);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_CBS);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_IA);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_RCS);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_XCAP);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_EIMS);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED);
            mNetworkFilter[i].addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);

            mNetworkFactory[i] = new TelephonyNetworkFactory(this.getLooper(),
                    mPhones[i].getContext(), "TelephonyNetworkFactory", phoneBase,
                    mNetworkFilter[i]);
            mNetworkFactory[i].setScoreFilter(50);
            mNetworkFactoryMessenger[i] = new Messenger(mNetworkFactory[i]);
            cm.registerNetworkFactory(mNetworkFactoryMessenger[i], "Telephony");

            updatePhoneBaseForIndex(i, phoneBase);
        }

        mContext = mPhones[0].getContext();
@@ -600,11 +607,6 @@ public class DctController extends Handler {
        private final SparseArray<NetworkRequest> mPendingReq = new SparseArray<NetworkRequest>();
        private Phone mPhone;

        public void setPhone(Phone phone) {
            log("NetworkCapabilities: setPhone=" + phone);
            mPhone = phone;
        }

        public TelephonyNetworkFactory(Looper l, Context c, String TAG, Phone phone,
                NetworkCapabilities nc) {
            super(l, c, TAG, nc);