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

Commit 0c929574 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 5286292 from 6c25fd12 to qt-release

Change-Id: I01eceaf902f890bce371c253b60490d3830cc0a2
parents 88b19259 6c25fd12
Loading
Loading
Loading
Loading
+53 −39
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ import android.util.Log;
 * validation process. It listens request on a specific subId, sends a network request
 * to Connectivity and listens to its callback or timeout.
 */
public class CellularNetworkValidator extends ConnectivityManager.NetworkCallback  {
public class CellularNetworkValidator {
    private static final String LOG_TAG = "NetworkValidator";

    // States of validator. Only one validation can happen at once.
@@ -56,6 +56,7 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
    private Context mContext;
    private ConnectivityManager mConnectivityManager;
    private Handler mHandler = new Handler();
    private ConnectivityNetworkCallback mNetworkCallback;

    /**
     * Callback to pass in when starting validation.
@@ -109,12 +110,6 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
        // If it's already validating the same subscription, do nothing.
        if (subId == mSubId) return;

        if (isValidating()) {
            logd("Failed to start validation. Already validating sub " + mSubId);
            callback.onValidationResult(false, subId);
            return;
        }

        Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId(subId));
        if (phone == null) {
            logd("Failed to start validation. Inactive subId " + subId);
@@ -122,6 +117,10 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
            return;
        }

        if (isValidating()) {
            stopValidation();
        }

        mState = STATE_VALIDATING;
        mSubId = subId;
        mTimeoutInMs = timeoutInMs;
@@ -132,7 +131,10 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
        logd("Start validating subId " + mSubId + " mTimeoutInMs " + mTimeoutInMs
                + " mReleaseAfterValidation " + mReleaseAfterValidation);

        mConnectivityManager.requestNetwork(mNetworkRequest, this, mHandler, mTimeoutInMs);
        mNetworkCallback = new ConnectivityNetworkCallback(subId);

        mConnectivityManager.requestNetwork(
                mNetworkRequest, mNetworkCallback, mHandler, mTimeoutInMs);
    }

    /**
@@ -142,7 +144,7 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
        if (!isValidating()) {
            logd("No need to stop validation.");
        } else {
            mConnectivityManager.unregisterNetworkCallback(this);
            mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
            mState = STATE_IDLE;
        }
        mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -170,7 +172,10 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
                .build();
    }

    private synchronized void reportValidationResult(boolean passed) {
    private synchronized void reportValidationResult(boolean passed, int subId) {
        // If the validation result is not for current subId, do nothing.
        if (mSubId != subId) return;

        // Deal with the result only when state is still VALIDATING. This is to avoid
        // receiving multiple callbacks in queue.
        if (mState == STATE_VALIDATING) {
@@ -178,12 +183,20 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
            if (!mReleaseAfterValidation && passed) {
                mState = STATE_VALIDATED;
            } else {
                mConnectivityManager.unregisterNetworkCallback(this);
                mConnectivityManager.unregisterNetworkCallback(mNetworkCallback);
                mState = STATE_IDLE;
            }
        }

        mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    }

    class ConnectivityNetworkCallback extends ConnectivityManager.NetworkCallback {
        private final int mSubId;

        ConnectivityNetworkCallback(int subId) {
            mSubId = subId;
        }
        /**
         * ConnectivityManager.NetworkCallback implementation
         */
@@ -195,19 +208,19 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
        @Override
        public void onLosing(Network network, int maxMsToLive) {
            logd("network onLosing " + network + " maxMsToLive " + maxMsToLive);
        reportValidationResult(false);
            reportValidationResult(false, ConnectivityNetworkCallback.this.mSubId);
        }

        @Override
        public void onLost(Network network) {
            logd("network onLost " + network);
        reportValidationResult(false);
            reportValidationResult(false, ConnectivityNetworkCallback.this.mSubId);
        }

        @Override
        public void onUnavailable() {
            logd("onUnavailable");
        reportValidationResult(false);
            reportValidationResult(false, ConnectivityNetworkCallback.this.mSubId);
        }

        @Override
@@ -215,7 +228,8 @@ public class CellularNetworkValidator extends ConnectivityManager.NetworkCallbac
                NetworkCapabilities networkCapabilities) {
            if (networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) {
                logd("onValidated");
            reportValidationResult(true);
                reportValidationResult(true, ConnectivityNetworkCallback.this.mSubId);
            }
        }
    }

+11 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.os.ServiceManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.telephony.DebugEventReporter;
import android.telephony.Rlog;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -549,6 +550,16 @@ public class PhoneFactory {
        } catch (Exception e) {
            e.printStackTrace();
        }
        pw.decreaseIndent();
        pw.println("++++++++++++++++++++++++++++++++");
        pw.println("DebugEvents:");
        pw.increaseIndent();
        try {
            DebugEventReporter.dump(fd, pw, args);
        } catch (Exception e) {
            e.printStackTrace();
        }

        pw.flush();
        pw.decreaseIndent();
    }
+32 −22
Original line number Diff line number Diff line
@@ -69,6 +69,8 @@ import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.RetryManager;
import com.android.internal.telephony.ServiceStateTracker;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.dataconnection.DcTracker.ReleaseNetworkType;
import com.android.internal.telephony.dataconnection.DcTracker.RequestNetworkType;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.IndentingPrintWriter;
@@ -143,16 +145,18 @@ public class DataConnection extends StateMachine {
        int mRilRat;
        Message mOnCompletedMsg;
        final int mConnectionGeneration;
        final boolean mIsHandover;
        @RequestNetworkType
        final int mRequestType;

        ConnectionParams(ApnContext apnContext, int profileId, int rilRadioTechnology,
                         Message onCompletedMsg, int connectionGeneration, boolean isHandover) {
                         Message onCompletedMsg, int connectionGeneration,
                         @RequestNetworkType int requestType) {
            mApnContext = apnContext;
            mProfileId = profileId;
            mRilRat = rilRadioTechnology;
            mOnCompletedMsg = onCompletedMsg;
            mConnectionGeneration = connectionGeneration;
            mIsHandover = isHandover;
            mRequestType = requestType;
        }

        @Override
@@ -161,7 +165,7 @@ public class DataConnection extends StateMachine {
                    + " mProfileId=" + mProfileId
                    + " mRat=" + mRilRat
                    + " mOnCompletedMsg=" + msgToString(mOnCompletedMsg)
                    + " mIsHandover=" + mIsHandover
                    + " mRequestType=" + DcTracker.requestTypeToString(mRequestType)
                    + "}";
        }
    }
@@ -173,14 +177,15 @@ public class DataConnection extends StateMachine {
        int mTag;
        public ApnContext mApnContext;
        String mReason;
        final boolean mIsHandover;
        @ReleaseNetworkType
        final int mReleaseType;
        Message mOnCompletedMsg;

        DisconnectParams(ApnContext apnContext, String reason, boolean isHandover,
        DisconnectParams(ApnContext apnContext, String reason, @ReleaseNetworkType int releaseType,
                         Message onCompletedMsg) {
            mApnContext = apnContext;
            mReason = reason;
            mIsHandover = isHandover;
            mReleaseType = releaseType;
            mOnCompletedMsg = onCompletedMsg;
        }

@@ -188,7 +193,7 @@ public class DataConnection extends StateMachine {
        public String toString() {
            return "{mTag=" + mTag + " mApnContext=" + mApnContext
                    + " mReason=" + mReason
                    + " mIsHandover=" + mIsHandover
                    + " mReleaseType=" + DcTracker.releaseTypeToString(mReleaseType)
                    + " mOnCompletedMsg=" + msgToString(mOnCompletedMsg) + "}";
        }
    }
@@ -599,7 +604,7 @@ public class DataConnection extends StateMachine {
        // Check if this data setup is a handover.
        LinkProperties linkProperties = null;
        int reason = DataService.REQUEST_REASON_NORMAL;
        if (cp.mIsHandover) {
        if (cp.mRequestType == DcTracker.REQUEST_TYPE_HANDOVER) {
            // If this is a data setup for handover, we need to pass the link properties
            // of the existing data connection to the modem.
            DcTracker dcTracker = getHandoverDcTracker();
@@ -659,7 +664,7 @@ public class DataConnection extends StateMachine {
            if (TextUtils.equals(dp.mReason, Phone.REASON_RADIO_TURNED_OFF)
                    || TextUtils.equals(dp.mReason, Phone.REASON_PDP_RESET)) {
                discReason = DataService.REQUEST_REASON_SHUTDOWN;
            } else if (dp.mIsHandover) {
            } else if (dp.mReleaseType == DcTracker.RELEASE_TYPE_HANDOVER) {
                discReason = DataService.REQUEST_REASON_HANDOVER;
            }
        }
@@ -679,7 +684,7 @@ public class DataConnection extends StateMachine {
            if (apnContext == alreadySent) continue;
            if (reason != null) apnContext.setReason(reason);
            Pair<ApnContext, Integer> pair = new Pair<>(apnContext, cp.mConnectionGeneration);
            Message msg = mDct.obtainMessage(event, mCid, cp.mIsHandover ? 1 : 0, pair);
            Message msg = mDct.obtainMessage(event, mCid, cp.mRequestType, pair);
            AsyncResult.forMessage(msg);
            msg.sendToTarget();
        }
@@ -704,7 +709,7 @@ public class DataConnection extends StateMachine {

            long timeStamp = System.currentTimeMillis();
            connectionCompletedMsg.arg1 = mCid;
            connectionCompletedMsg.arg2 = cp.mIsHandover ? 1 : 0;
            connectionCompletedMsg.arg2 = cp.mRequestType;

            if (cause == DataFailCause.NONE) {
                mCreateTime = timeStamp;
@@ -1806,7 +1811,8 @@ public class DataConnection extends StateMachine {
                        + ", mUnmeteredUseOnly = " + mUnmeteredUseOnly);
            }

            if (mConnectionParams != null && mConnectionParams.mIsHandover) {
            if (mConnectionParams != null
                    && mConnectionParams.mRequestType == DcTracker.REQUEST_TYPE_HANDOVER) {
                // If this is a data setup for handover, we need to reuse the existing network agent
                // instead of creating a new one. This should be transparent to connectivity
                // service.
@@ -1864,7 +1870,8 @@ public class DataConnection extends StateMachine {
                // cases we need to update connectivity service with the latest network info.
                //
                // For handover, the network agent is transferred to the other data connection.
                if (mDisconnectParams == null || !mDisconnectParams.mIsHandover) {
                if (mDisconnectParams == null
                        || mDisconnectParams.mReleaseType != DcTracker.RELEASE_TYPE_HANDOVER) {
                    mNetworkAgent.sendNetworkInfo(mNetworkInfo);
                }
                mNetworkAgent = null;
@@ -2294,7 +2301,7 @@ public class DataConnection extends StateMachine {
                log("DcNetworkAgent: [unwanted]: disconnect apnContext=" + apnContext);
                Message msg = mDct.obtainMessage(DctConstants.EVENT_DISCONNECT_DONE, pair);
                DisconnectParams dp = new DisconnectParams(apnContext, apnContext.getReason(),
                        false, msg);
                        DcTracker.RELEASE_TYPE_DETACH, msg);
                DataConnection.this.sendMessage(DataConnection.this.
                        obtainMessage(EVENT_DISCONNECT, dp));
            }
@@ -2480,16 +2487,17 @@ public class DataConnection extends StateMachine {
     *                       AsyncResult.result = FailCause and AsyncResult.exception = Exception().
     * @param connectionGeneration used to track a single connection request so disconnects can get
     *                             ignored if obsolete.
     * @param isHandover {@code true} if this request is for handover.
     * @param requestType Data request type
     */
    public void bringUp(ApnContext apnContext, int profileId, int rilRadioTechnology,
                        Message onCompletedMsg, int connectionGeneration, boolean isHandover) {
                        Message onCompletedMsg, int connectionGeneration,
                        @RequestNetworkType int requestType) {
        if (DBG) {
            log("bringUp: apnContext=" + apnContext + " onCompletedMsg=" + onCompletedMsg);
        }
        sendMessage(DataConnection.EVENT_CONNECT,
                new ConnectionParams(apnContext, profileId, rilRadioTechnology, onCompletedMsg,
                        connectionGeneration, isHandover));
                        connectionGeneration, requestType));
    }

    /**
@@ -2506,7 +2514,8 @@ public class DataConnection extends StateMachine {
                    + onCompletedMsg);
        }
        sendMessage(DataConnection.EVENT_DISCONNECT,
                new DisconnectParams(apnContext, reason, false, onCompletedMsg));
                new DisconnectParams(apnContext, reason, DcTracker.RELEASE_TYPE_DETACH,
                        onCompletedMsg));
    }

    // ******* "public" interface
@@ -2523,14 +2532,15 @@ public class DataConnection extends StateMachine {
     * Tear down the connection through the apn on the network.  Ignores reference count and
     * and always tears down.
     *
     * @param isHandover {@code true} if this is for handover
     * @param releaseType Data release type
     * @param onCompletedMsg is sent with its msg.obj as an AsyncResult object.
     *        With AsyncResult.userObj set to the original msg.obj.
     */
    public void tearDownAll(String reason, boolean isHandover, Message onCompletedMsg) {
    public void tearDownAll(String reason, @ReleaseNetworkType int releaseType,
                            Message onCompletedMsg) {
        if (DBG) log("tearDownAll: reason=" + reason + " onCompletedMsg=" + onCompletedMsg);
        sendMessage(DataConnection.EVENT_DISCONNECT_ALL,
                new DisconnectParams(null, reason, isHandover, onCompletedMsg));
                new DisconnectParams(null, reason, releaseType, onCompletedMsg));
    }

    /**
+41 −37

File changed.

Preview size limit exceeded, changes collapsed.

+3 −0
Original line number Diff line number Diff line
@@ -956,6 +956,9 @@ public class EuiccConnector extends StateMachine implements ServiceConnection {
     * Gets the slot ID from the card ID.
     */
    private int getSlotIdFromCardId(int cardId) {
        if (cardId == TelephonyManager.INVALID_CARD_ID) {
            return SubscriptionManager.INVALID_SIM_SLOT_INDEX;
        }
        TelephonyManager tm = (TelephonyManager)
                mContext.getSystemService(Context.TELEPHONY_SERVICE);
        List<UiccCardInfo> infos = tm.getUiccCardsInfo();
Loading