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

Commit 7171466f authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Keep ping request" into main

parents 72987fb6 d09450c7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
package: "com.android.internal.telephony.flags"
container: "system"

# OWNER=linggm TARGET=25Q2
flag {
  name: "keep_ping_request"
  namespace: "telephony"
  description: "If ping test is not required to pass, keep the ping request to avoid deactivate followed by reactivate"
  bug: "366318732"
  metadata {
    purpose: PURPOSE_BUGFIX
  }
}

# OWNER=linggm TARGET=24Q4
flag {
  name: "keep_empty_requests_network"
+1 −1
Original line number Diff line number Diff line
@@ -268,7 +268,7 @@ public class PhoneFactory {
                            SimultaneousCallingTracker.init(sContext, featureFlags);
                }

                sCellularNetworkValidator = CellularNetworkValidator.make(sContext);
                sCellularNetworkValidator = CellularNetworkValidator.make(sContext, sFeatureFlags);

                int maxActivePhones = sPhoneConfigurationManager
                        .getNumberOfModemsWithSimultaneousDataConnections();
+15 −8
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConfigurationManager;
import com.android.internal.telephony.PhoneFactory;
import com.android.internal.telephony.flags.FeatureFlags;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.nano.TelephonyProto.TelephonyEvent;
import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
@@ -77,7 +78,7 @@ public class CellularNetworkValidator {

    private int mState = STATE_IDLE;
    private int mSubId;
    private boolean mReleaseAfterValidation;
    private boolean mRequireTestPass;

    private ValidationCallback mValidationCallback;
    private final Context mContext;
@@ -88,6 +89,8 @@ public class CellularNetworkValidator {
    public ConnectivityNetworkCallback mNetworkCallback;
    private final ValidatedNetworkCache mValidatedNetworkCache = new ValidatedNetworkCache();

    @NonNull
    private final FeatureFlags mFlags;
    private class ValidatedNetworkCache {
        // A cache with fixed size. It remembers 10 most recently successfully validated networks.
        private static final int VALIDATED_NETWORK_CACHE_SIZE = 10;
@@ -206,11 +209,12 @@ public class CellularNetworkValidator {
    /**
     * Create instance.
     */
    public static CellularNetworkValidator make(Context context) {
    public static CellularNetworkValidator make(Context context,
            @NonNull FeatureFlags featureFlags) {
        if (sInstance != null) {
            logd("createCellularNetworkValidator failed. Instance already exists.");
        } else {
            sInstance = new CellularNetworkValidator(context);
            sInstance = new CellularNetworkValidator(context, featureFlags);
        }

        return sInstance;
@@ -232,8 +236,9 @@ public class CellularNetworkValidator {
    }

    @VisibleForTesting
    public CellularNetworkValidator(Context context) {
    public CellularNetworkValidator(Context context, @NonNull FeatureFlags featureFlags) {
        mContext = context;
        mFlags = featureFlags;
        mConnectivityManager = (ConnectivityManager)
                mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    }
@@ -242,7 +247,7 @@ public class CellularNetworkValidator {
     * API to start a validation
     */
    public synchronized void validate(int subId, long timeoutInMs,
            boolean releaseAfterValidation, ValidationCallback callback) {
            boolean requireTestPass, ValidationCallback callback) {
        // If it's already validating the same subscription, do nothing.
        if (subId == mSubId) return;

@@ -261,10 +266,10 @@ public class CellularNetworkValidator {
        mState = STATE_VALIDATING;
        mSubId = subId;
        mValidationCallback = callback;
        mReleaseAfterValidation = releaseAfterValidation;
        mRequireTestPass = requireTestPass;

        logd("Start validating subId " + mSubId + " timeoutInMs " + timeoutInMs
                + " mReleaseAfterValidation " + mReleaseAfterValidation);
                + " mRequireTestPass " + mRequireTestPass);

        mNetworkCallback = new ConnectivityNetworkCallback(subId);

@@ -329,8 +334,10 @@ public class CellularNetworkValidator {
        if (mState == STATE_VALIDATING) {
            mValidationCallback.onValidationDone(passed, mSubId);
            mState = STATE_VALIDATED;
            boolean keepRequest = mFlags.keepPingRequest()
                    ? (passed || !mRequireTestPass) : (!mRequireTestPass && passed);
            // If validation passed and per request to NOT release after validation, delay cleanup.
            if (!mReleaseAfterValidation && passed) {
            if (keepRequest) {
                mHandler.postDelayed(this::stopValidation, 500);
            } else {
                stopValidation();
+2 −1
Original line number Diff line number Diff line
@@ -1617,7 +1617,8 @@ public class PhoneSwitcher extends Handler {
        mPendingSwitchNeedValidation = needValidation;
        mSetOpptSubCallback = callback;
        long validationTimeout = getValidationTimeout(subIdToValidate, needValidation);
        mValidator.validate(subIdToValidate, validationTimeout, false, mValidationCallback);
        mValidator.validate(subIdToValidate, validationTimeout,
                mFlags.keepPingRequest() && mPendingSwitchNeedValidation, mValidationCallback);
    }

    private long getValidationTimeout(int subId, boolean needValidation) {
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ public class CellularNetworkValidatorTest extends TelephonyTest {

        doReturn(CAPABILITY_WITH_VALIDATION_SUPPORTED).when(mPhoneConfigurationManager)
                .getCurrentPhoneCapability();
        mValidatorUT = new CellularNetworkValidator(mContext);
        mValidatorUT = new CellularNetworkValidator(mContext, mFeatureFlags);
        doReturn(new SubscriptionInfoInternal.Builder().setSimSlotIndex(0).setId(1).build())
                .when(mSubscriptionManagerService).getSubscriptionInfoInternal(anyInt());
        processAllMessages();