Register BroadcastReceiver for default subId.

Register a receiver of ACTION_DEFAULT_SUBSCRIPTION_CHANGED to update
the cached default subId.

Bug: 273451360
Test: atest FrameworksNetTests
(cherry picked from https://android-review.googlesource.com/q/commit:7b36f2322bf0e7b8f7c916a98914289f9878b676)
Merged-In: I3a38af7615fde2811449585d4e659ffaf29c5670
Change-Id: I3a38af7615fde2811449585d4e659ffaf29c5670
This commit is contained in:
Hansen Kurli
2023-06-08 07:53:26 +00:00
committed by Cherrypicker Worker
parent 36a18e669b
commit 54e0676d19
2 changed files with 81 additions and 6 deletions

View File

@@ -27,12 +27,15 @@ import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.TelephonyNetworkSpecifier;
@@ -109,6 +112,18 @@ public class KeepaliveStatsTrackerTest {
@Mock private KeepaliveStatsTracker.Dependencies mDependencies;
@Mock private SubscriptionManager mSubscriptionManager;
private void triggerBroadcastDefaultSubId(int subId) {
final ArgumentCaptor<BroadcastReceiver> receiverCaptor =
ArgumentCaptor.forClass(BroadcastReceiver.class);
verify(mContext).registerReceiver(receiverCaptor.capture(), /* filter= */ any(),
/* broadcastPermission= */ any(), eq(mTestHandler));
final Intent intent =
new Intent(TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED);
intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
receiverCaptor.getValue().onReceive(mContext, intent);
}
private OnSubscriptionsChangedListener getOnSubscriptionsChangedListener() {
final ArgumentCaptor<OnSubscriptionsChangedListener> listenerCaptor =
ArgumentCaptor.forClass(OnSubscriptionsChangedListener.class);
@@ -1128,4 +1143,53 @@ public class KeepaliveStatsTrackerTest {
writeTime * 3 - startTime1 - startTime2 - startTime3)
});
}
@Test
public void testUpdateDefaultSubId() {
final int startTime1 = 1000;
final int startTime2 = 3000;
final int writeTime = 5000;
// No TelephonyNetworkSpecifier set with subId to force the use of default subId.
final NetworkCapabilities nc =
new NetworkCapabilities.Builder().addTransportType(TRANSPORT_CELLULAR).build();
onStartKeepalive(startTime1, TEST_SLOT, nc);
// Update default subId
triggerBroadcastDefaultSubId(TEST_SUB_ID_1);
onStartKeepalive(startTime2, TEST_SLOT2, nc);
final DailykeepaliveInfoReported dailyKeepaliveInfoReported =
buildKeepaliveMetrics(writeTime);
final int[] expectRegisteredDurations =
new int[] {startTime1, startTime2 - startTime1, writeTime - startTime2};
final int[] expectActiveDurations =
new int[] {startTime1, startTime2 - startTime1, writeTime - startTime2};
// Expect the carrier id of the first keepalive to be unknown
final KeepaliveCarrierStats expectKeepaliveCarrierStats1 =
new KeepaliveCarrierStats(
TelephonyManager.UNKNOWN_CARRIER_ID,
/* transportTypes= */ (1 << TRANSPORT_CELLULAR),
TEST_KEEPALIVE_INTERVAL_SEC * 1000,
writeTime - startTime1,
writeTime - startTime1);
// Expect the carrier id of the second keepalive to be TEST_CARRIER_ID_1, from TEST_SUB_ID_1
final KeepaliveCarrierStats expectKeepaliveCarrierStats2 =
new KeepaliveCarrierStats(
TEST_CARRIER_ID_1,
/* transportTypes= */ (1 << TRANSPORT_CELLULAR),
TEST_KEEPALIVE_INTERVAL_SEC * 1000,
writeTime - startTime2,
writeTime - startTime2);
assertDailyKeepaliveInfoReported(
dailyKeepaliveInfoReported,
/* expectRequestsCount= */ 2,
/* expectAutoRequestsCount= */ 2,
/* expectAppUids= */ new int[] {TEST_UID},
expectRegisteredDurations,
expectActiveDurations,
new KeepaliveCarrierStats[] {
expectKeepaliveCarrierStats1, expectKeepaliveCarrierStats2
});
}
}