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

Commit 5963f375 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed service state changed event

Added a new registrant for service state changed event.
Also added service state non-legacy mode initialization
support.

Fix: 217985293
Test: Manual
Change-Id: I04266ceea567fc498118fbb09362d9d8e5efa350
parent d8ffa576
Loading
Loading
Loading
Loading
+34 −9
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ import java.util.Comparator;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
@@ -210,6 +211,7 @@ public class ServiceStateTracker extends Handler {
    @UnsupportedAppUsage
    private RegistrantList mNetworkAttachedRegistrants = new RegistrantList();
    private RegistrantList mNetworkDetachedRegistrants = new RegistrantList();
    private RegistrantList mServiceStateChangedRegistrants = new RegistrantList();
    private RegistrantList mPsRestrictEnabledRegistrants = new RegistrantList();
    private RegistrantList mPsRestrictDisabledRegistrants = new RegistrantList();
    private RegistrantList mImsCapabilityChangedRegistrants = new RegistrantList();
@@ -650,9 +652,6 @@ public class ServiceStateTracker extends Handler {
                .isVoiceCapable();
        mUiccController = UiccController.getInstance();

        mOutOfServiceSS = new ServiceState();
        mOutOfServiceSS.setStateOutOfService();

        mUiccController.registerForIccChanged(this, EVENT_ICC_CHANGED, null);
        mCi.registerForCellInfoList(this, EVENT_UNSOL_CELL_INFO_LIST, null);
        mCi.registerForPhysicalChannelConfiguration(this, EVENT_PHYSICAL_CHANNEL_CONFIG, null);
@@ -664,6 +663,8 @@ public class ServiceStateTracker extends Handler {
        mRestrictedState = new RestrictedState();

        mTransportManager = mPhone.getTransportManager();
        mOutOfServiceSS = new ServiceState();
        mOutOfServiceSS.setOutOfService(mTransportManager.isInLegacyMode(), false);

        for (int transportType : mTransportManager.getAvailableTransports()) {
            mRegStateManagers.append(transportType, new NetworkRegistrationManager(
@@ -759,9 +760,9 @@ public class ServiceStateTracker extends Handler {
        }

        mSS = new ServiceState();
        mSS.setStateOutOfService();
        mSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mNewSS = new ServiceState();
        mNewSS.setStateOutOfService();
        mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
        mLastCellInfoReqTime = 0;
        mLastCellInfoList = null;
        mStartedGprsRegCheck = false;
@@ -3323,7 +3324,7 @@ public class ServiceStateTracker extends Handler {

        switch (mCi.getRadioState()) {
            case TelephonyManager.RADIO_POWER_UNAVAILABLE:
                mNewSS.setStateOutOfService();
                mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);
                mPhone.getSignalStrengthController().setSignalStrengthDefaultValues();
                mLastNitzData = null;
                mNitzState.handleNetworkUnavailable();
@@ -3331,7 +3332,7 @@ public class ServiceStateTracker extends Handler {
                break;

            case TelephonyManager.RADIO_POWER_OFF:
                mNewSS.setStateOff();
                mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), true);
                mPhone.getSignalStrengthController().setSignalStrengthDefaultValues();
                mLastNitzData = null;
                mNitzState.handleNetworkUnavailable();
@@ -3647,9 +3648,14 @@ public class ServiceStateTracker extends Handler {
            mRejectCode = mNewRejectCode;
        }

        if (!Objects.equals(mSS, mNewSS)) {
            mServiceStateChangedRegistrants.notifyRegistrants();
        }

        ServiceState oldMergedSS = new ServiceState(mPhone.getServiceState());
        mSS = new ServiceState(mNewSS);
        mNewSS.setStateOutOfService();

        mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), false);

        mCellIdentity = primaryCellIdentity;
        if (mSS.getState() == ServiceState.STATE_IN_SERVICE && primaryCellIdentity != null) {
@@ -4941,6 +4947,25 @@ public class ServiceStateTracker extends Handler {
        mImsCapabilityChangedRegistrants.remove(h);
    }

    /**
     * Register for service state changed event.
     *
     * @param h handler to notify
     * @param what what code of message when delivered
     */
    public void registerForServiceStateChanged(Handler h, int what) {
        mServiceStateChangedRegistrants.addUnique(h, what, null);
    }

    /**
     * Unregister for service state changed event.
     *
     * @param h The handler.
     */
    public void unregisterForServiceStateChanged(Handler h) {
        mServiceStateChangedRegistrants.remove(h);
    }

    /**
     * Clean up existing voice and data connection then turn off radio power.
     *
@@ -5559,7 +5584,7 @@ public class ServiceStateTracker extends Handler {
            }
            // operator info should be kept in SS
            String operator = mNewSS.getOperatorAlphaLong();
            mNewSS.setStateOff();
            mNewSS.setOutOfService(mTransportManager.isInLegacyMode(), true);
            if (resetIwlanRatVal) {
                mNewSS.setDataRegState(ServiceState.STATE_IN_SERVICE);
                NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+9 −10
Original line number Diff line number Diff line
@@ -842,9 +842,8 @@ public class DataNetworkController extends Handler {
                .registerForServiceBindingChanged(this, EVENT_DATA_SERVICE_BINDING_CHANGED);

        if (!mAccessNetworksManager.isInLegacyMode()) {
            mPhone.getServiceStateTracker().registerForDataRegStateOrRatChanged(
                    AccessNetworkConstants.TRANSPORT_TYPE_WLAN, this, EVENT_SERVICE_STATE_CHANGED,
                    AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
            mPhone.getServiceStateTracker().registerForServiceStateChanged(this,
                    EVENT_SERVICE_STATE_CHANGED);
            mDataServiceManagers.get(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)
                    .registerForServiceBindingChanged(this, EVENT_DATA_SERVICE_BINDING_CHANGED);
        }
@@ -2439,11 +2438,11 @@ public class DataNetworkController extends Handler {
    private void onServiceStateChanged() {
        // Use the raw service state instead of the mPhone.getServiceState().
        ServiceState newServiceState = mPhone.getServiceStateTracker().getServiceState();
        logv("onServiceStateChanged: " + newServiceState);
        StringBuilder debugMessage = new StringBuilder("onServiceStateChanged: ");
        boolean evaluateNetworkRequests = false, evaluateDataNetworks = false;

        if (!mServiceState.equals(newServiceState)) {
            log("onServiceStateChanged: changed to " + newServiceState);
            for (int transport : mAccessNetworksManager.getAvailableTransports()) {
                NetworkRegistrationInfo oldNri = mServiceState.getNetworkRegistrationInfo(
                        NetworkRegistrationInfo.DOMAIN_PS, transport);
@@ -2595,10 +2594,10 @@ public class DataNetworkController extends Handler {
     * @return The current network type.
     */
    private @NetworkType int getDataNetworkType(@TransportType int transport) {
        NetworkRegistrationInfo nrs = mServiceState.getNetworkRegistrationInfo(
        NetworkRegistrationInfo nri = mServiceState.getNetworkRegistrationInfo(
                NetworkRegistrationInfo.DOMAIN_PS, transport);
        if (nrs != null) {
            return nrs.getAccessNetworkTechnology();
        if (nri != null) {
            return nri.getAccessNetworkTechnology();
        }
        return TelephonyManager.NETWORK_TYPE_UNKNOWN;
    }
@@ -2610,10 +2609,10 @@ public class DataNetworkController extends Handler {
     * @return The registration state.
     */
    private @RegistrationState int getDataRegistrationState(@TransportType int transport) {
        NetworkRegistrationInfo nrs = mServiceState.getNetworkRegistrationInfo(
        NetworkRegistrationInfo nri = mServiceState.getNetworkRegistrationInfo(
                NetworkRegistrationInfo.DOMAIN_PS, transport);
        if (nrs != null) {
            return nrs.getRegistrationState();
        if (nri != null) {
            return nri.getRegistrationState();
        }
        return NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN;
    }
+5 −1
Original line number Diff line number Diff line
@@ -458,7 +458,11 @@ public class ImsPhone extends ImsPhoneBase {
        mCT.registerPhoneStateListener(mExternalCallTracker);
        mExternalCallTracker.setCallPuller(mCT);

        mSS.setStateOff();
        boolean legacyMode = true;
        if (mDefaultPhone.getTransportManager() != null) {
            legacyMode = mDefaultPhone.getTransportManager().isInLegacyMode();
        }
        mSS.setOutOfService(legacyMode, false);

        mPhoneId = mDefaultPhone.getPhoneId();