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

Commit 9351059c authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 10078820 from 2795f8ab to udc-release

Change-Id: If6ad5cc6a7f9e05dcd6fcbd3c363bd1475b816d3
parents 369a0886 2795f8ab
Loading
Loading
Loading
Loading
+13 −4
Original line number Original line Diff line number Diff line
@@ -1340,13 +1340,14 @@ public class DataNetwork extends StateMachine {
                }
                }
            }
            }


            // If we've ever received PCO data before connected, now it's the time to
            // If we've ever received PCO data before connected, now it's the time to process it.
            // process it.
            mPcoData.getOrDefault(mCid.get(mTransport), Collections.emptyMap())
            mPcoData.getOrDefault(mCid.get(mTransport), Collections.emptyMap())
                    .forEach((pcoId, pcoData) -> {
                    .forEach((pcoId, pcoData) -> {
                        onPcoDataChanged(pcoData);
                        onPcoDataChanged(pcoData);
                    });
                    });


            mDataNetworkCallback.invokeFromExecutor(
                    () -> mDataNetworkCallback.onLinkStatusChanged(DataNetwork.this, mLinkStatus));
            notifyPreciseDataConnectionState();
            notifyPreciseDataConnectionState();
            updateSuspendState();
            updateSuspendState();
        }
        }
@@ -1598,6 +1599,9 @@ public class DataNetwork extends StateMachine {
            //************************************************************//
            //************************************************************//


            if (mEverConnected) {
            if (mEverConnected) {
                mLinkStatus = DataCallResponse.LINK_STATUS_INACTIVE;
                mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                        .onLinkStatusChanged(DataNetwork.this, mLinkStatus));
                mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                        .onDisconnected(DataNetwork.this, mFailCause, mTearDownReason));
                        .onDisconnected(DataNetwork.this, mFailCause, mTearDownReason));
                if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
                if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
@@ -2302,8 +2306,13 @@ public class DataNetwork extends StateMachine {
        if (mLinkStatus != response.getLinkStatus()) {
        if (mLinkStatus != response.getLinkStatus()) {
            mLinkStatus = response.getLinkStatus();
            mLinkStatus = response.getLinkStatus();
            log("Link status updated to " + DataUtils.linkStatusToString(mLinkStatus));
            log("Link status updated to " + DataUtils.linkStatusToString(mLinkStatus));
            mDataNetworkCallback.invokeFromExecutor(
            if (isConnected()) {
                    () -> mDataNetworkCallback.onLinkStatusChanged(DataNetwork.this, mLinkStatus));
                // If the data network is in a transition state, the link status will be notified
                // upon entering connected or disconnected state. If the data network is already
                // connected, send the updated link status from the updated data call response.
                mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                        .onLinkStatusChanged(DataNetwork.this, mLinkStatus));
            }
        }
        }


        // Set link addresses
        // Set link addresses
+32 −51
Original line number Original line Diff line number Diff line
@@ -78,7 +78,6 @@ import android.util.IndentingPrintWriter;
import android.util.LocalLog;
import android.util.LocalLog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.util.SparseBooleanArray;
import android.util.SparseIntArray;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
@@ -335,11 +334,8 @@ public class DataNetworkController extends Handler {
     */
     */
    private final @NonNull SparseArray<ImsStateCallback> mImsStateCallbacks = new SparseArray<>();
    private final @NonNull SparseArray<ImsStateCallback> mImsStateCallbacks = new SparseArray<>();


    /**
    /** Registered IMS features. Unregistered IMS features are removed from the set. */
     * The transport on which IMS features are registered. Key is the IMS feature, value is the
    private final @NonNull Set<Integer> mRegisteredImsFeatures = new ArraySet<>();
     * transport. Unregistered IMS features are removed from the set.
     */
    private final @NonNull SparseIntArray mRegisteredImsFeaturesTransport = new SparseIntArray(2);


    /** IMS feature package names. Key is the IMS feature, value is the package name. */
    /** IMS feature package names. Key is the IMS feature, value is the package name. */
    private final @NonNull SparseArray<String> mImsFeaturePackageName = new SparseArray<>();
    private final @NonNull SparseArray<String> mImsFeaturePackageName = new SparseArray<>();
@@ -2204,18 +2200,17 @@ public class DataNetworkController extends Handler {
        RegistrationManager.RegistrationCallback callback =
        RegistrationManager.RegistrationCallback callback =
                new RegistrationManager.RegistrationCallback() {
                new RegistrationManager.RegistrationCallback() {
                    @Override
                    @Override
                    public void onRegistered(@NonNull ImsRegistrationAttributes attributes) {
                    public void onRegistered(ImsRegistrationAttributes attributes) {
                        log("IMS " + DataUtils.imsFeatureToString(imsFeature)
                        log("IMS " + DataUtils.imsFeatureToString(imsFeature)
                                + " registered. Attributes=" + attributes);
                                + " registered. Attributes=" + attributes);
                        mRegisteredImsFeaturesTransport.put(
                        mRegisteredImsFeatures.add(imsFeature);
                                imsFeature, attributes.getTransportType());
                    }
                    }


                    @Override
                    @Override
                    public void onUnregistered(ImsReasonInfo info) {
                    public void onUnregistered(ImsReasonInfo info) {
                        log("IMS " + DataUtils.imsFeatureToString(imsFeature)
                        log("IMS " + DataUtils.imsFeatureToString(imsFeature)
                                + " deregistered. Info=" + info);
                                + " deregistered. Info=" + info);
                        mRegisteredImsFeaturesTransport.delete(imsFeature);
                        mRegisteredImsFeatures.remove(imsFeature);
                        evaluatePendingImsDeregDataNetworks();
                        evaluatePendingImsDeregDataNetworks();
                    }
                    }
                };
                };
@@ -2907,16 +2902,6 @@ public class DataNetworkController extends Handler {
            mImsDataNetworkState = TelephonyManager.DATA_DISCONNECTED;
            mImsDataNetworkState = TelephonyManager.DATA_DISCONNECTED;
        }
        }


        if (!mPendingTearDownAllNetworks) {
            // Immediately reestablish on target transport if network was torn down due to policy
            long delayMillis = tearDownReason == DataNetwork.TEAR_DOWN_REASON_HANDOVER_NOT_ALLOWED
                    ? 0 : mDataConfigManager.getRetrySetupAfterDisconnectMillis();
            // Sometimes network was unsolicitedly reported lost for reasons. We should re-evaluate
            // and see if data network can be re-established again.
            sendMessageDelayed(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                    DataEvaluationReason.RETRY_AFTER_DISCONNECTED), delayMillis);
        }

        if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) {
        if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) {
            log("All data networks disconnected now.");
            log("All data networks disconnected now.");
            mPendingTearDownAllNetworks = false;
            mPendingTearDownAllNetworks = false;
@@ -2924,6 +2909,14 @@ public class DataNetworkController extends Handler {
            mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
            mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                    () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting)));
                    () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting)));
        }
        }

        // Immediately reestablish on target transport if network was torn down due to policy
        long delayMillis = tearDownReason == DataNetwork.TEAR_DOWN_REASON_HANDOVER_NOT_ALLOWED
                ? 0 : mDataConfigManager.getRetrySetupAfterDisconnectMillis();
        // Sometimes network was unsolicitedly reported lost for reasons. We should re-evaluate
        // and see if data network can be re-established again.
        sendMessageDelayed(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                        DataEvaluationReason.RETRY_AFTER_DISCONNECTED), delayMillis);
    }
    }


    /**
    /**
@@ -3655,26 +3648,25 @@ public class DataNetworkController extends Handler {
    }
    }


    /**
    /**
     * Check if the data network is safe to tear down at this moment. A network is considered safe
     * Check if the data network is safe to tear down at this moment.
     * to tear down if No IMS/RCS registration is relying on it. We infer a network is Not safe to
     * tear down if 1) the network is on the transport where the IMS/RCS feature registration
     * took place, and 2) the network has requests originated from the IMS/RCS service.
     *
     *
     * @param dataNetwork The data network.
     * @param dataNetwork The data network.
     * @return {@code true} if the data network is safe to tear down; {@code false} otherwise.
     * @return {@code true} if the data network is safe to tear down. {@code false} indicates this
     * data network has requests originated from the IMS/RCS service and IMS/RCS is not
     * de-registered yet.
     */
     */
    private boolean isSafeToTearDown(@NonNull DataNetwork dataNetwork) {
    private boolean isSafeToTearDown(@NonNull DataNetwork dataNetwork) {
        for (int imsFeature : SUPPORTED_IMS_FEATURES) {
        for (int imsFeature : SUPPORTED_IMS_FEATURES) {
            int registeredOnTransport = mRegisteredImsFeaturesTransport.get(imsFeature,
                    AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
            if (dataNetwork.getTransport() == registeredOnTransport) {
            String imsFeaturePackage = mImsFeaturePackageName.get(imsFeature);
            String imsFeaturePackage = mImsFeaturePackageName.get(imsFeature);
                if (imsFeaturePackage != null && dataNetwork.getAttachedNetworkRequestList()
            if (imsFeaturePackage != null) {
                if (dataNetwork.getAttachedNetworkRequestList()
                        .hasNetworkRequestsFromPackage(imsFeaturePackage)) {
                        .hasNetworkRequestsFromPackage(imsFeaturePackage)) {
                    if (mRegisteredImsFeatures.contains(imsFeature)) {
                        return false;
                        return false;
                    }
                    }
                }
                }
            }
            }
        }
        // All IMS features are de-registered (or this data network has no requests from IMS feature
        // All IMS features are de-registered (or this data network has no requests from IMS feature
        // packages.
        // packages.
        return true;
        return true;
@@ -3695,19 +3687,13 @@ public class DataNetworkController extends Handler {
    private void tearDownGracefully(@NonNull DataNetwork dataNetwork, @TearDownReason int reason) {
    private void tearDownGracefully(@NonNull DataNetwork dataNetwork, @TearDownReason int reason) {
        long deregDelay = mDataConfigManager.getImsDeregistrationDelay();
        long deregDelay = mDataConfigManager.getImsDeregistrationDelay();
        if (isImsGracefulTearDownSupported() && !isSafeToTearDown(dataNetwork)) {
        if (isImsGracefulTearDownSupported() && !isSafeToTearDown(dataNetwork)) {
            int mmtelTransport = mRegisteredImsFeaturesTransport.get(ImsFeature.FEATURE_MMTEL,
                    AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
            int rcsTransport = mRegisteredImsFeaturesTransport.get(ImsFeature.FEATURE_RCS,
                    AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
            log("tearDownGracefully: Not safe to tear down " + dataNetwork
            log("tearDownGracefully: Not safe to tear down " + dataNetwork
                    + " at this point. Wait for IMS de-registration or timeout. MMTEL="
                    + " at this point. Wait for IMS de-registration or timeout. MMTEL="
                    + (mmtelTransport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID
                    + (mRegisteredImsFeatures.contains(ImsFeature.FEATURE_MMTEL)
                    ? "registered on " + AccessNetworkConstants.transportTypeToString(
                    ? "registered" : "not registered")
                            mmtelTransport) : "not registered")
                    + ", RCS="
                    + ", RCS="
                    + (rcsTransport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID
                    + (mRegisteredImsFeatures.contains(ImsFeature.FEATURE_RCS)
                    ? "registered on " + AccessNetworkConstants.transportTypeToString(
                    ? "registered" : "not registered")
                            rcsTransport) : "not registered")
            );
            );
            Runnable runnable = dataNetwork.tearDownWhenConditionMet(reason, deregDelay);
            Runnable runnable = dataNetwork.tearDownWhenConditionMet(reason, deregDelay);
            if (runnable != null) {
            if (runnable != null) {
@@ -3820,18 +3806,13 @@ public class DataNetworkController extends Handler {
            pw.println(networkRequest);
            pw.println(networkRequest);
        }
        }
        pw.decreaseIndent();
        pw.decreaseIndent();
        int mmtelTransport = mRegisteredImsFeaturesTransport.get(ImsFeature.FEATURE_MMTEL,

                AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
        int rcsTransport = mRegisteredImsFeaturesTransport.get(ImsFeature.FEATURE_RCS,
                AccessNetworkConstants.TRANSPORT_TYPE_INVALID);
        pw.println("IMS features registration state: MMTEL="
        pw.println("IMS features registration state: MMTEL="
                + (mmtelTransport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID
                + (mRegisteredImsFeatures.contains(ImsFeature.FEATURE_MMTEL)
                ? "registered on " + AccessNetworkConstants.transportTypeToString(
                ? "registered" : "not registered")
                        mmtelTransport) : "not registered")
                + ", RCS="
                + ", RCS="
                + (rcsTransport != AccessNetworkConstants.TRANSPORT_TYPE_INVALID
                + (mRegisteredImsFeatures.contains(ImsFeature.FEATURE_RCS)
                ? "registered on " + AccessNetworkConstants.transportTypeToString(
                ? "registered" : "not registered"));
                rcsTransport) : "not registered"));
        pw.println("mServiceState=" + mServiceState);
        pw.println("mServiceState=" + mServiceState);
        pw.println("mPsRestricted=" + mPsRestricted);
        pw.println("mPsRestricted=" + mPsRestricted);
        pw.println("mAnyDataNetworkExisting=" + mAnyDataNetworkExisting);
        pw.println("mAnyDataNetworkExisting=" + mAnyDataNetworkExisting);
+5 −4
Original line number Original line Diff line number Diff line
@@ -98,7 +98,7 @@ public class DatagramController {
     * @param pointingAppController PointingAppController is used to update PointingApp
     * @param pointingAppController PointingAppController is used to update PointingApp
     *                              about datagram transfer state changes.
     *                              about datagram transfer state changes.
     */
     */
    @VisibleForTesting
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected DatagramController(@NonNull Context context, @NonNull Looper  looper,
    protected DatagramController(@NonNull Context context, @NonNull Looper  looper,
            @NonNull PointingAppController pointingAppController) {
            @NonNull PointingAppController pointingAppController) {
        mContext = context;
        mContext = context;
@@ -264,7 +264,8 @@ public class DatagramController {
     * Set variables for {@link DatagramDispatcher} and {@link DatagramReceiver} to run demo mode
     * Set variables for {@link DatagramDispatcher} and {@link DatagramReceiver} to run demo mode
     * @param isDemoMode {@code true} means demo mode is on, {@code false} otherwise.
     * @param isDemoMode {@code true} means demo mode is on, {@code false} otherwise.
     */
     */
    void setDemoMode(boolean isDemoMode) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void setDemoMode(boolean isDemoMode) {
        mIsDemoMode = isDemoMode;
        mIsDemoMode = isDemoMode;
        mDatagramDispatcher.setDemoMode(isDemoMode);
        mDatagramDispatcher.setDemoMode(isDemoMode);
        mDatagramReceiver.setDemoMode(isDemoMode);
        mDatagramReceiver.setDemoMode(isDemoMode);
@@ -275,7 +276,7 @@ public class DatagramController {
    }
    }


    /** Get the last sent datagram for demo mode */
    /** Get the last sent datagram for demo mode */
    @VisibleForTesting
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public SatelliteDatagram getDemoModeDatagram() {
    public SatelliteDatagram getDemoModeDatagram() {
        return mDemoModeDatagram;
        return mDemoModeDatagram;
    }
    }
@@ -285,7 +286,7 @@ public class DatagramController {
     * @param datagramType datagram type, only DATAGRAM_TYPE_SOS_MESSAGE will be saved
     * @param datagramType datagram type, only DATAGRAM_TYPE_SOS_MESSAGE will be saved
     * @param datagram datagram The last datagram saved when sendSatelliteDatagramForDemo is called
     * @param datagram datagram The last datagram saved when sendSatelliteDatagramForDemo is called
     */
     */
    @VisibleForTesting
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void setDemoModeDatagram(@SatelliteManager.DatagramType int datagramType,
    protected void setDemoModeDatagram(@SatelliteManager.DatagramType int datagramType,
            SatelliteDatagram datagram) {
            SatelliteDatagram datagram) {
        if (mIsDemoMode &&  datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) {
        if (mIsDemoMode &&  datagramType == SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE) {
+16 −5
Original line number Original line Diff line number Diff line
@@ -283,7 +283,8 @@ public class SatelliteController extends Handler {
        }
        }
    }
    }


    private void initializeSatelliteModeRadios() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void initializeSatelliteModeRadios() {
        UwbManager uwbManager = mContext.getSystemService(UwbManager.class);
        UwbManager uwbManager = mContext.getSystemService(UwbManager.class);
        NfcManager nfcManager = mContext.getSystemService(NfcManager.class);
        NfcManager nfcManager = mContext.getSystemService(NfcManager.class);
        NfcAdapter nfcAdapter = null;
        NfcAdapter nfcAdapter = null;
@@ -313,6 +314,10 @@ public class SatelliteController extends Handler {
                // Read satellite mode radios from settings
                // Read satellite mode radios from settings
                String satelliteModeRadios = Settings.Global.getString(mContentResolver,
                String satelliteModeRadios = Settings.Global.getString(mContentResolver,
                        Settings.Global.SATELLITE_MODE_RADIOS);
                        Settings.Global.SATELLITE_MODE_RADIOS);
                if (satelliteModeRadios == null) {
                    loge("initializeSatelliteModeRadios: satelliteModeRadios is null");
                    return;
                }
                logd("Radios To be checked when satellite is on: " + satelliteModeRadios);
                logd("Radios To be checked when satellite is on: " + satelliteModeRadios);


                if (satelliteModeRadios.contains(Settings.Global.RADIO_BLUETOOTH)
                if (satelliteModeRadios.contains(Settings.Global.RADIO_BLUETOOTH)
@@ -1756,6 +1761,8 @@ public class SatelliteController extends Handler {
        boolean result = mSatelliteModemInterface.setSatelliteServicePackageName(
        boolean result = mSatelliteModemInterface.setSatelliteServicePackageName(
                servicePackageName);
                servicePackageName);
        if (result) {
        if (result) {
            logd("setSatelliteServicePackageName: Resetting cached states");

            // Cached states need to be cleared whenever switching satellite vendor services.
            // Cached states need to be cleared whenever switching satellite vendor services.
            synchronized (mIsSatelliteSupportedLock) {
            synchronized (mIsSatelliteSupportedLock) {
                mIsSatelliteSupported = null;
                mIsSatelliteSupported = null;
@@ -1847,7 +1854,8 @@ public class SatelliteController extends Handler {
     * Because satellite vendor service might have just come back from a crash, we need to disable
     * Because satellite vendor service might have just come back from a crash, we need to disable
     * the satellite modem so that resources will be cleaned up and internal states will be reset.
     * the satellite modem so that resources will be cleaned up and internal states will be reset.
     */
     */
    void onSatelliteServiceConnected() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public void onSatelliteServiceConnected() {
        if (mSatelliteModemInterface.isSatelliteServiceSupported()) {
        if (mSatelliteModemInterface.isSatelliteServiceSupported()) {
            synchronized (mIsSatelliteSupportedLock) {
            synchronized (mIsSatelliteSupportedLock) {
                if (mIsSatelliteSupported == null) {
                if (mIsSatelliteSupported == null) {
@@ -2186,13 +2194,16 @@ public class SatelliteController extends Handler {


        mDatagramController.onSatelliteModemStateChanged(state);
        mDatagramController.onSatelliteModemStateChanged(state);
    }
    }
    private void setSettingsKeyForSatelliteMode(int val) {

    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected void setSettingsKeyForSatelliteMode(int val) {
        logd("setSettingsKeyForSatelliteMode val: " + val);
        logd("setSettingsKeyForSatelliteMode val: " + val);
        Settings.Global.putInt(mContext.getContentResolver(),
        Settings.Global.putInt(mContext.getContentResolver(),
                    Settings.Global.SATELLITE_MODE_ENABLED, val);
                    Settings.Global.SATELLITE_MODE_ENABLED, val);
    }
    }


    private boolean areAllRadiosDisabled() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected boolean areAllRadiosDisabled() {
        synchronized (mRadioStateLock) {
        synchronized (mRadioStateLock) {
            if ((mDisableBTOnSatelliteEnabled && mBTStateEnabled)
            if ((mDisableBTOnSatelliteEnabled && mBTStateEnabled)
                    || (mDisableNFCOnSatelliteEnabled && mNfcStateEnabled)
                    || (mDisableNFCOnSatelliteEnabled && mNfcStateEnabled)
+2 −1
Original line number Original line Diff line number Diff line
@@ -1015,7 +1015,8 @@ public class SatelliteModemInterface {
     * @return {@code true} if the satellite vendor service is set successfully,
     * @return {@code true} if the satellite vendor service is set successfully,
     * {@code false} otherwise.
     * {@code false} otherwise.
     */
     */
    boolean setSatelliteServicePackageName(@Nullable String servicePackageName) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    public boolean setSatelliteServicePackageName(@Nullable String servicePackageName) {
        if (!shouldAllowModifyingSatelliteServicePackageName()) {
        if (!shouldAllowModifyingSatelliteServicePackageName()) {
            loge("setSatelliteServicePackageName: modifying satellite service package name "
            loge("setSatelliteServicePackageName: modifying satellite service package name "
                    + "is not allowed");
                    + "is not allowed");
Loading