Loading src/java/com/android/internal/telephony/CellularNetworkValidator.java +2 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ public class CellularNetworkValidator { private int mState = STATE_IDLE; private int mSubId; private int mTimeoutInMs; private long mTimeoutInMs; private boolean mReleaseAfterValidation; private NetworkRequest mNetworkRequest; Loading Loading @@ -114,7 +114,7 @@ public class CellularNetworkValidator { /** * API to start a validation */ public synchronized void validate(int subId, int timeoutInMs, public synchronized void validate(int subId, long timeoutInMs, boolean releaseAfterValidation, ValidationCallback callback) { // If it's already validating the same subscription, do nothing. if (subId == mSubId) return; Loading src/java/com/android/internal/telephony/PhoneSwitcher.java +13 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.telephony.CarrierConfigManager.KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG; import static android.telephony.SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; import static android.telephony.SubscriptionManager.INVALID_PHONE_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading @@ -41,10 +42,12 @@ import android.os.AsyncResult; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; import android.os.RegistrantList; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.CarrierConfigManager; import android.telephony.PhoneCapability; import android.telephony.PhoneStateListener; import android.telephony.Rlog; Loading Loading @@ -1168,8 +1171,16 @@ public class PhoneSwitcher extends Handler { // start validation on the subscription first. if (mValidator.isValidationFeatureSupported() && needValidation) { mSetOpptSubCallback = callback; mValidator.validate(subIdToValidate, DEFAULT_VALIDATION_EXPIRATION_TIME, false, mValidationCallback); long validationTimeout = DEFAULT_VALIDATION_EXPIRATION_TIME; CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle b = configManager.getConfigForSubId(subIdToValidate); if (b != null) { validationTimeout = b.getLong(KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG); } } mValidator.validate(subIdToValidate, validationTimeout, false, mValidationCallback); } else { setOpportunisticSubscriptionInternal(subId); sendSetOpptCallbackHelper(callback, SET_OPPORTUNISTIC_SUB_SUCCESS); Loading tests/telephonytests/src/com/android/internal/telephony/PhoneSwitcherTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import static android.telephony.CarrierConfigManager.KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_SUCCESS; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED; Loading Loading @@ -498,7 +499,7 @@ public class PhoneSwitcherTest extends TelephonyTest { // Set sub 2 as preferred sub should make phone 1 activated and phone 0 deactivated. mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, null); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); // Validation failed. Preferred data sub should remain 1, data phone should remain 0. mPhoneSwitcher.mValidationCallback.onValidationResult(false, 2); Loading @@ -512,11 +513,14 @@ public class PhoneSwitcherTest extends TelephonyTest { processAllMessages(); assertEquals(1, mPhoneSwitcher.getPreferredDataPhoneId()); // Switching data back to primary (subId 1). // Switching data back to primary (subId 1) with customized validation timeout. long timeout = 1234; mContextFixture.getCarrierConfigBundle().putLong( KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG, timeout); mPhoneSwitcher.trySetOpportunisticDataSubscription( SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, true, null); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(1), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(1), eq(timeout), eq(false), eq(mPhoneSwitcher.mValidationCallback)); mPhoneSwitcher.mValidationCallback.onValidationResult(true, 1); processAllMessages(); Loading Loading @@ -868,7 +872,7 @@ public class PhoneSwitcherTest extends TelephonyTest { clearInvocations(mSetOpptDataCallback2); mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback1); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); doReturn(true).when(mCellularNetworkValidator).isValidating(); mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback2); Loading @@ -890,7 +894,7 @@ public class PhoneSwitcherTest extends TelephonyTest { // Back to back call, call 1 to switch to subId 2, call 2 to switch back. mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback1); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); doReturn(true).when(mCellularNetworkValidator).isValidating(); mPhoneSwitcher.trySetOpportunisticDataSubscription( Loading Loading
src/java/com/android/internal/telephony/CellularNetworkValidator.java +2 −2 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ public class CellularNetworkValidator { private int mState = STATE_IDLE; private int mSubId; private int mTimeoutInMs; private long mTimeoutInMs; private boolean mReleaseAfterValidation; private NetworkRequest mNetworkRequest; Loading Loading @@ -114,7 +114,7 @@ public class CellularNetworkValidator { /** * API to start a validation */ public synchronized void validate(int subId, int timeoutInMs, public synchronized void validate(int subId, long timeoutInMs, boolean releaseAfterValidation, ValidationCallback callback) { // If it's already validating the same subscription, do nothing. if (subId == mSubId) return; Loading
src/java/com/android/internal/telephony/PhoneSwitcher.java +13 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; import static android.telephony.CarrierConfigManager.KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG; import static android.telephony.SubscriptionManager.DEFAULT_SUBSCRIPTION_ID; import static android.telephony.SubscriptionManager.INVALID_PHONE_INDEX; import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID; Loading @@ -41,10 +42,12 @@ import android.os.AsyncResult; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; import android.os.RegistrantList; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.CarrierConfigManager; import android.telephony.PhoneCapability; import android.telephony.PhoneStateListener; import android.telephony.Rlog; Loading Loading @@ -1168,8 +1171,16 @@ public class PhoneSwitcher extends Handler { // start validation on the subscription first. if (mValidator.isValidationFeatureSupported() && needValidation) { mSetOpptSubCallback = callback; mValidator.validate(subIdToValidate, DEFAULT_VALIDATION_EXPIRATION_TIME, false, mValidationCallback); long validationTimeout = DEFAULT_VALIDATION_EXPIRATION_TIME; CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); if (configManager != null) { PersistableBundle b = configManager.getConfigForSubId(subIdToValidate); if (b != null) { validationTimeout = b.getLong(KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG); } } mValidator.validate(subIdToValidate, validationTimeout, false, mValidationCallback); } else { setOpportunisticSubscriptionInternal(subId); sendSetOpptCallbackHelper(callback, SET_OPPORTUNISTIC_SUB_SUCCESS); Loading
tests/telephonytests/src/com/android/internal/telephony/PhoneSwitcherTest.java +9 −5 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import static android.telephony.CarrierConfigManager.KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_INACTIVE_SUBSCRIPTION; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_SUCCESS; import static android.telephony.TelephonyManager.SET_OPPORTUNISTIC_SUB_VALIDATION_FAILED; Loading Loading @@ -498,7 +499,7 @@ public class PhoneSwitcherTest extends TelephonyTest { // Set sub 2 as preferred sub should make phone 1 activated and phone 0 deactivated. mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, null); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); // Validation failed. Preferred data sub should remain 1, data phone should remain 0. mPhoneSwitcher.mValidationCallback.onValidationResult(false, 2); Loading @@ -512,11 +513,14 @@ public class PhoneSwitcherTest extends TelephonyTest { processAllMessages(); assertEquals(1, mPhoneSwitcher.getPreferredDataPhoneId()); // Switching data back to primary (subId 1). // Switching data back to primary (subId 1) with customized validation timeout. long timeout = 1234; mContextFixture.getCarrierConfigBundle().putLong( KEY_DATA_SWITCH_VALIDATION_TIMEOUT_LONG, timeout); mPhoneSwitcher.trySetOpportunisticDataSubscription( SubscriptionManager.DEFAULT_SUBSCRIPTION_ID, true, null); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(1), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(1), eq(timeout), eq(false), eq(mPhoneSwitcher.mValidationCallback)); mPhoneSwitcher.mValidationCallback.onValidationResult(true, 1); processAllMessages(); Loading Loading @@ -868,7 +872,7 @@ public class PhoneSwitcherTest extends TelephonyTest { clearInvocations(mSetOpptDataCallback2); mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback1); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); doReturn(true).when(mCellularNetworkValidator).isValidating(); mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback2); Loading @@ -890,7 +894,7 @@ public class PhoneSwitcherTest extends TelephonyTest { // Back to back call, call 1 to switch to subId 2, call 2 to switch back. mPhoneSwitcher.trySetOpportunisticDataSubscription(2, true, mSetOpptDataCallback1); processAllMessages(); verify(mCellularNetworkValidator).validate(eq(2), anyInt(), eq(false), verify(mCellularNetworkValidator).validate(eq(2), anyLong(), eq(false), eq(mPhoneSwitcher.mValidationCallback)); doReturn(true).when(mCellularNetworkValidator).isValidating(); mPhoneSwitcher.trySetOpportunisticDataSubscription( Loading