Merge "Create UiccSlotRepository" into main
This commit is contained in:
@@ -24,10 +24,10 @@ import android.telephony.SubscriptionInfo
|
|||||||
import android.telephony.SubscriptionManager
|
import android.telephony.SubscriptionManager
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import android.telephony.UiccCardInfo
|
import android.telephony.UiccCardInfo
|
||||||
import android.telephony.UiccSlotInfo
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.android.settings.network.SimOnboardingActivity.Companion.CallbackType
|
import com.android.settings.network.SimOnboardingActivity.Companion.CallbackType
|
||||||
import com.android.settings.network.telephony.MobileDataRepository
|
import com.android.settings.network.telephony.MobileDataRepository
|
||||||
|
import com.android.settings.network.telephony.UiccSlotRepository
|
||||||
import com.android.settings.sim.SimActivationNotifier
|
import com.android.settings.sim.SimActivationNotifier
|
||||||
import com.android.settings.spa.network.setDefaultData
|
import com.android.settings.spa.network.setDefaultData
|
||||||
import com.android.settings.spa.network.setDefaultSms
|
import com.android.settings.spa.network.setDefaultSms
|
||||||
@@ -46,7 +46,6 @@ class SimOnboardingService {
|
|||||||
var targetSubInfo: SubscriptionInfo? = null
|
var targetSubInfo: SubscriptionInfo? = null
|
||||||
var availableSubInfoList: List<SubscriptionInfo> = listOf()
|
var availableSubInfoList: List<SubscriptionInfo> = listOf()
|
||||||
var activeSubInfoList: List<SubscriptionInfo> = listOf()
|
var activeSubInfoList: List<SubscriptionInfo> = listOf()
|
||||||
var slotInfoList: List<UiccSlotInfo> = listOf()
|
|
||||||
var uiccCardInfoList: List<UiccCardInfo> = listOf()
|
var uiccCardInfoList: List<UiccCardInfo> = listOf()
|
||||||
var targetPrimarySimCalls: Int = INVALID_SUBSCRIPTION_ID
|
var targetPrimarySimCalls: Int = INVALID_SUBSCRIPTION_ID
|
||||||
var targetPrimarySimTexts: Int = INVALID_SUBSCRIPTION_ID
|
var targetPrimarySimTexts: Int = INVALID_SUBSCRIPTION_ID
|
||||||
@@ -73,14 +72,6 @@ class SimOnboardingService {
|
|||||||
}
|
}
|
||||||
return uiccCardInfoList.any { it.isMultipleEnabledProfilesSupported }
|
return uiccCardInfoList.any { it.isMultipleEnabledProfilesSupported }
|
||||||
}
|
}
|
||||||
var isRemovablePsimProfileEnabled: Boolean = false
|
|
||||||
get() {
|
|
||||||
if(slotInfoList.isEmpty()) {
|
|
||||||
Log.w(TAG, "UICC Slot info list is empty.")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return UiccSlotUtil.isRemovableSimEnabled(slotInfoList)
|
|
||||||
}
|
|
||||||
var isEsimProfileEnabled: Boolean = false
|
var isEsimProfileEnabled: Boolean = false
|
||||||
get() {
|
get() {
|
||||||
activeSubInfoList.stream().anyMatch { it.isEmbedded }
|
activeSubInfoList.stream().anyMatch { it.isEmbedded }
|
||||||
@@ -137,19 +128,11 @@ class SimOnboardingService {
|
|||||||
return telephonyManager?.doesSwitchMultiSimConfigTriggerReboot() ?: false
|
return telephonyManager?.doesSwitchMultiSimConfigTriggerReboot() ?: false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isValid(): Boolean {
|
|
||||||
return targetSubId != INVALID_SUBSCRIPTION_ID
|
|
||||||
&& targetSubInfo != null
|
|
||||||
&& activeSubInfoList.isNotEmpty()
|
|
||||||
&& slotInfoList.isNotEmpty()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clear() {
|
fun clear() {
|
||||||
targetSubId = -1
|
targetSubId = -1
|
||||||
targetSubInfo = null
|
targetSubInfo = null
|
||||||
availableSubInfoList = listOf()
|
availableSubInfoList = listOf()
|
||||||
activeSubInfoList = listOf()
|
activeSubInfoList = listOf()
|
||||||
slotInfoList = listOf()
|
|
||||||
uiccCardInfoList = listOf()
|
uiccCardInfoList = listOf()
|
||||||
targetPrimarySimCalls = -1
|
targetPrimarySimCalls = -1
|
||||||
targetPrimarySimTexts = -1
|
targetPrimarySimTexts = -1
|
||||||
@@ -181,8 +164,6 @@ class SimOnboardingService {
|
|||||||
availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId }
|
availableSubInfoList.find { subInfo -> subInfo.subscriptionId == targetSubId }
|
||||||
targetSubInfo?.let { userSelectedSubInfoList.add(it) }
|
targetSubInfo?.let { userSelectedSubInfoList.add(it) }
|
||||||
Log.d(TAG, "targetSubId: $targetSubId , targetSubInfo: $targetSubInfo")
|
Log.d(TAG, "targetSubId: $targetSubId , targetSubInfo: $targetSubInfo")
|
||||||
slotInfoList = telephonyManager?.uiccSlotsInfo?.toList() ?: listOf()
|
|
||||||
Log.d(TAG, "slotInfoList: $slotInfoList.")
|
|
||||||
uiccCardInfoList = telephonyManager?.uiccCardsInfo!!
|
uiccCardInfoList = telephonyManager?.uiccCardsInfo!!
|
||||||
Log.d(TAG, "uiccCardInfoList: $uiccCardInfoList")
|
Log.d(TAG, "uiccCardInfoList: $uiccCardInfoList")
|
||||||
|
|
||||||
@@ -192,7 +173,6 @@ class SimOnboardingService {
|
|||||||
|
|
||||||
Log.d(
|
Log.d(
|
||||||
TAG,"doesTargetSimHaveEsimOperation: $doesTargetSimHaveEsimOperation" +
|
TAG,"doesTargetSimHaveEsimOperation: $doesTargetSimHaveEsimOperation" +
|
||||||
", isRemovableSimEnabled: $isRemovablePsimProfileEnabled" +
|
|
||||||
", isMultipleEnabledProfilesSupported: $isMultipleEnabledProfilesSupported" +
|
", isMultipleEnabledProfilesSupported: $isMultipleEnabledProfilesSupported" +
|
||||||
", targetPrimarySimCalls: $targetPrimarySimCalls" +
|
", targetPrimarySimCalls: $targetPrimarySimCalls" +
|
||||||
", targetPrimarySimTexts: $targetPrimarySimTexts" +
|
", targetPrimarySimTexts: $targetPrimarySimTexts" +
|
||||||
@@ -317,14 +297,15 @@ class SimOnboardingService {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (doesTargetSimHaveEsimOperation && isRemovablePsimProfileEnabled) {
|
if (doesTargetSimHaveEsimOperation) {
|
||||||
Log.d(TAG,
|
if (UiccSlotRepository(telephonyManager).anyRemovablePhysicalSimEnabled()) {
|
||||||
"eSIM operation and removable PSIM is enabled. DSDS condition satisfied."
|
Log.d(
|
||||||
)
|
TAG,
|
||||||
return true
|
"eSIM operation and removable PSIM is enabled. DSDS condition satisfied."
|
||||||
}
|
)
|
||||||
|
return true
|
||||||
if (!doesTargetSimHaveEsimOperation && isEsimProfileEnabled) {
|
}
|
||||||
|
} else if (isEsimProfileEnabled) {
|
||||||
Log.d(TAG,
|
Log.d(TAG,
|
||||||
"Removable SIM operation and eSIM profile is enabled. DSDS condition"
|
"Removable SIM operation and eSIM profile is enabled. DSDS condition"
|
||||||
+ " satisfied."
|
+ " satisfied."
|
||||||
|
@@ -30,8 +30,6 @@ import android.util.Log;
|
|||||||
import com.android.settings.SidecarFragment;
|
import com.android.settings.SidecarFragment;
|
||||||
import com.android.settings.network.telephony.EuiccOperationSidecar;
|
import com.android.settings.network.telephony.EuiccOperationSidecar;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -205,10 +203,10 @@ public class SwitchToEuiccSubscriptionSidecar extends EuiccOperationSidecar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getLogicalSlotIndex(int physicalSlotIndex, int portIndex) {
|
private int getLogicalSlotIndex(int physicalSlotIndex, int portIndex) {
|
||||||
ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(mTelephonyManager);
|
UiccSlotInfo[] slotInfos = mTelephonyManager.getUiccSlotsInfo();
|
||||||
if (slotInfos != null && physicalSlotIndex >= 0 && physicalSlotIndex < slotInfos.size()
|
if (slotInfos != null && physicalSlotIndex >= 0 && physicalSlotIndex < slotInfos.length
|
||||||
&& slotInfos.get(physicalSlotIndex) != null) {
|
&& slotInfos[physicalSlotIndex] != null) {
|
||||||
for (UiccPortInfo portInfo : slotInfos.get(physicalSlotIndex).getPorts()) {
|
for (UiccPortInfo portInfo : slotInfos[physicalSlotIndex].getPorts()) {
|
||||||
if (portInfo.getPortIndex() == portIndex) {
|
if (portInfo.getPortIndex() == portIndex) {
|
||||||
return portInfo.getLogicalSlotIndex();
|
return portInfo.getLogicalSlotIndex();
|
||||||
}
|
}
|
||||||
|
@@ -33,8 +33,6 @@ import android.util.Log;
|
|||||||
import com.android.internal.annotations.VisibleForTesting;
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
import com.android.settingslib.utils.ThreadUtils;
|
import com.android.settingslib.utils.ThreadUtils;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -105,18 +103,6 @@ public class UiccSlotUtil {
|
|||||||
int SYNC_CLEANUP = 2;
|
int SYNC_CLEANUP = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns an immutable list of all UICC slots. If TelephonyManager#getUiccSlotsInfo returns, it
|
|
||||||
* returns an empty list instead.
|
|
||||||
*/
|
|
||||||
public static ImmutableList<UiccSlotInfo> getSlotInfos(TelephonyManager telMgr) {
|
|
||||||
UiccSlotInfo[] slotInfos = telMgr.getUiccSlotsInfo();
|
|
||||||
if (slotInfos == null) {
|
|
||||||
return ImmutableList.of();
|
|
||||||
}
|
|
||||||
return ImmutableList.copyOf(slotInfos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Switches to the removable slot. It waits for SIM_STATE_LOADED after switch. If slotId is
|
* Switches to the removable slot. It waits for SIM_STATE_LOADED after switch. If slotId is
|
||||||
* INVALID_PHYSICAL_SLOT_ID, the method will use the first detected inactive removable slot.
|
* INVALID_PHYSICAL_SLOT_ID, the method will use the first detected inactive removable slot.
|
||||||
@@ -219,14 +205,13 @@ public class UiccSlotUtil {
|
|||||||
*/
|
*/
|
||||||
public static int getEsimSlotId(Context context, int subId) {
|
public static int getEsimSlotId(Context context, int subId) {
|
||||||
TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
|
TelephonyManager telMgr = context.getSystemService(TelephonyManager.class);
|
||||||
List<UiccCardInfo> uiccCardInfos = telMgr.getUiccCardsInfo();
|
|
||||||
ImmutableList<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(telMgr);
|
|
||||||
SubscriptionManager subscriptionManager = context.getSystemService(
|
SubscriptionManager subscriptionManager = context.getSystemService(
|
||||||
SubscriptionManager.class).createForAllUserProfiles();
|
SubscriptionManager.class).createForAllUserProfiles();
|
||||||
SubscriptionInfo subInfo = SubscriptionUtil.getSubById(subscriptionManager, subId);
|
SubscriptionInfo subInfo = SubscriptionUtil.getSubById(subscriptionManager, subId);
|
||||||
|
|
||||||
// checking whether this is the removable esim. If it is, then return the removable slot id.
|
// checking whether this is the removable esim. If it is, then return the removable slot id.
|
||||||
if (subInfo != null && subInfo.isEmbedded()) {
|
if (subInfo != null && subInfo.isEmbedded()) {
|
||||||
|
List<UiccCardInfo> uiccCardInfos = telMgr.getUiccCardsInfo();
|
||||||
for (UiccCardInfo uiccCardInfo : uiccCardInfos) {
|
for (UiccCardInfo uiccCardInfo : uiccCardInfos) {
|
||||||
if (uiccCardInfo.getCardId() == subInfo.getCardId()
|
if (uiccCardInfo.getCardId() == subInfo.getCardId()
|
||||||
&& uiccCardInfo.getCardId() > TelephonyManager.UNSUPPORTED_CARD_ID
|
&& uiccCardInfo.getCardId() > TelephonyManager.UNSUPPORTED_CARD_ID
|
||||||
@@ -238,10 +223,12 @@ public class UiccSlotUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int firstEsimSlot = IntStream.range(0, slotInfos.size())
|
UiccSlotInfo[] slotInfos = telMgr.getUiccSlotsInfo();
|
||||||
|
if (slotInfos == null) return -1;
|
||||||
|
int firstEsimSlot = IntStream.range(0, slotInfos.length)
|
||||||
.filter(
|
.filter(
|
||||||
index -> {
|
index -> {
|
||||||
UiccSlotInfo slotInfo = slotInfos.get(index);
|
UiccSlotInfo slotInfo = slotInfos[index];
|
||||||
if (slotInfo == null) {
|
if (slotInfo == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -421,41 +408,6 @@ public class UiccSlotUtil {
|
|||||||
.orElse(INVALID_LOGICAL_SLOT_ID);
|
.orElse(INVALID_LOGICAL_SLOT_ID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return whether the removable psim is enabled.
|
|
||||||
*
|
|
||||||
* @param telMgr is a TelephonyManager.
|
|
||||||
* @return whether the removable psim is enabled.
|
|
||||||
*/
|
|
||||||
public static boolean isRemovableSimEnabled(TelephonyManager telMgr) {
|
|
||||||
if (telMgr == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
List<UiccSlotInfo> slotInfos = UiccSlotUtil.getSlotInfos(telMgr);
|
|
||||||
return isRemovableSimEnabled(slotInfos);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return whether the removable psim is enabled.
|
|
||||||
*
|
|
||||||
* @param slotInfos is a List of UiccSlotInfo.
|
|
||||||
* @return whether the removable psim is enabled.
|
|
||||||
*/
|
|
||||||
public static boolean isRemovableSimEnabled(List<UiccSlotInfo> slotInfos) {
|
|
||||||
boolean isRemovableSimEnabled =
|
|
||||||
slotInfos.stream()
|
|
||||||
.anyMatch(
|
|
||||||
slot -> slot != null
|
|
||||||
&& slot.isRemovable()
|
|
||||||
&& !slot.getIsEuicc()
|
|
||||||
&& slot.getPorts().stream()
|
|
||||||
.anyMatch(port -> port.isActive())
|
|
||||||
&& slot.getCardStateInfo()
|
|
||||||
== UiccSlotInfo.CARD_STATE_INFO_PRESENT);
|
|
||||||
Log.i(TAG, "isRemovableSimEnabled: " + isRemovableSimEnabled);
|
|
||||||
return isRemovableSimEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isMultipleEnabledProfilesSupported(TelephonyManager telMgr) {
|
private static boolean isMultipleEnabledProfilesSupported(TelephonyManager telMgr) {
|
||||||
List<UiccCardInfo> cardInfos = telMgr.getUiccCardsInfo();
|
List<UiccCardInfo> cardInfos = telMgr.getUiccCardsInfo();
|
||||||
if (cardInfos == null) {
|
if (cardInfos == null) {
|
||||||
|
@@ -583,7 +583,7 @@ public class ToggleSubscriptionDialogActivity extends SubscriptionActionDialogAc
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRemovableSimEnabled() {
|
private boolean isRemovableSimEnabled() {
|
||||||
return UiccSlotUtil.isRemovableSimEnabled(mTelMgr);
|
return new UiccSlotRepository(mTelMgr).anyRemovablePhysicalSimEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isMultipleEnabledProfilesSupported() {
|
private boolean isMultipleEnabledProfilesSupported() {
|
||||||
|
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony
|
||||||
|
|
||||||
|
import android.telephony.TelephonyManager
|
||||||
|
import android.telephony.UiccSlotInfo
|
||||||
|
import android.util.Log
|
||||||
|
|
||||||
|
class UiccSlotRepository(private val telephonyManager: TelephonyManager?) {
|
||||||
|
|
||||||
|
/** Returns whether any removable physical sim is enabled. */
|
||||||
|
fun anyRemovablePhysicalSimEnabled(): Boolean {
|
||||||
|
val result =
|
||||||
|
telephonyManager?.uiccSlotsInfo?.any { uiccSlotInfo: UiccSlotInfo? ->
|
||||||
|
uiccSlotInfo.isRemovablePhysicalSimEnabled()
|
||||||
|
} ?: false
|
||||||
|
Log.i(TAG, "anyRemovablePhysicalSimEnabled: $result")
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun UiccSlotInfo?.isRemovablePhysicalSimEnabled(): Boolean {
|
||||||
|
return this != null &&
|
||||||
|
isRemovable &&
|
||||||
|
!isEuicc &&
|
||||||
|
ports.any { port -> port.isActive } &&
|
||||||
|
cardStateInfo == UiccSlotInfo.CARD_STATE_INFO_PRESENT
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "UiccRepository"
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,262 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2024 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.settings.network.telephony
|
||||||
|
|
||||||
|
import android.telephony.TelephonyManager
|
||||||
|
import android.telephony.UiccPortInfo
|
||||||
|
import android.telephony.UiccSlotInfo
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import com.google.common.truth.Truth.assertThat
|
||||||
|
import org.junit.Test
|
||||||
|
import org.junit.runner.RunWith
|
||||||
|
import org.mockito.kotlin.doReturn
|
||||||
|
import org.mockito.kotlin.mock
|
||||||
|
import org.mockito.kotlin.stub
|
||||||
|
|
||||||
|
@RunWith(AndroidJUnit4::class)
|
||||||
|
class UiccSlotRepositoryTest {
|
||||||
|
|
||||||
|
private val mockTelephonyManager = mock<TelephonyManager>()
|
||||||
|
|
||||||
|
private val repository = UiccSlotRepository(mockTelephonyManager)
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_oneSimSlotDeviceActiveEsim_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = false, logicalSlotIdx = 1, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_activeRemovableEsimAndInactivePsim_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = -1, isActive = false),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_activeRemovableEsimAndActivePsim_returnsTrue() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = true, logicalSlotIdx = 1, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_inactiveRemovableEsimAndActivePsim_returnsTrue() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = true, logicalSlotIdx = -1, isActive = false),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_twoActiveRemovableEsimsAndInactivePsim_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfoForRemovableEsimMep(
|
||||||
|
logicalSlotIdx1 = 0,
|
||||||
|
isActiveEsim1 = true,
|
||||||
|
logicalSlotIdx2 = 1,
|
||||||
|
isActiveEsim2 = true,
|
||||||
|
),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = -1, isActive = false),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_oneActiveOneInactiveRemovableEsimActivePsim_returnsTrue() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfoForRemovableEsimMep(
|
||||||
|
logicalSlotIdx1 = 1,
|
||||||
|
isActiveEsim1 = true,
|
||||||
|
logicalSlotIdx2 = -1,
|
||||||
|
isActiveEsim2 = false,
|
||||||
|
),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_activePsim_returnsTrue() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_inactivePsim_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = -1, isActive = false),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_activeEsimAndActivePsim_returnsTrue() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = true),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = false, logicalSlotIdx = 1, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isTrue()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_activeEsimAndInactivePsim_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub {
|
||||||
|
on { uiccSlotsInfo } doReturn
|
||||||
|
arrayOf(
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = false, isRemovable = true, logicalSlotIdx = 0, isActive = false),
|
||||||
|
createUiccSlotInfo(
|
||||||
|
isEuicc = true, isRemovable = false, logicalSlotIdx = 1, isActive = true),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun anyRemovablePhysicalSimEnabled_uiccSlotInfoIsNull_returnsFalse() {
|
||||||
|
mockTelephonyManager.stub { on { uiccSlotsInfo } doReturn arrayOf(null) }
|
||||||
|
|
||||||
|
val result = repository.anyRemovablePhysicalSimEnabled()
|
||||||
|
|
||||||
|
assertThat(result).isFalse()
|
||||||
|
}
|
||||||
|
|
||||||
|
private companion object {
|
||||||
|
fun createUiccSlotInfo(
|
||||||
|
isEuicc: Boolean,
|
||||||
|
isRemovable: Boolean,
|
||||||
|
logicalSlotIdx: Int,
|
||||||
|
isActive: Boolean
|
||||||
|
) =
|
||||||
|
UiccSlotInfo(
|
||||||
|
isEuicc,
|
||||||
|
/* cardId = */ "123",
|
||||||
|
/* cardStateInfo = */ UiccSlotInfo.CARD_STATE_INFO_PRESENT,
|
||||||
|
/* isExtendedApduSupported = */ true,
|
||||||
|
isRemovable,
|
||||||
|
/* portList = */ listOf(
|
||||||
|
UiccPortInfo(/* iccId= */ "", /* portIndex= */ 0, logicalSlotIdx, isActive),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
fun createUiccSlotInfoForRemovableEsimMep(
|
||||||
|
logicalSlotIdx1: Int,
|
||||||
|
isActiveEsim1: Boolean,
|
||||||
|
logicalSlotIdx2: Int,
|
||||||
|
isActiveEsim2: Boolean,
|
||||||
|
) =
|
||||||
|
UiccSlotInfo(
|
||||||
|
/* isEuicc = */ true,
|
||||||
|
/* cardId = */ "123",
|
||||||
|
/* cardStateInfo = */ UiccSlotInfo.CARD_STATE_INFO_PRESENT,
|
||||||
|
/* isExtendedApduSupported = */ true,
|
||||||
|
/* isRemovable = */ true,
|
||||||
|
/* portList = */ listOf(
|
||||||
|
UiccPortInfo(
|
||||||
|
/* iccId = */ "",
|
||||||
|
/* portIndex = */ 0,
|
||||||
|
/* logicalSlotIndex = */ logicalSlotIdx1,
|
||||||
|
/* isActive = */ isActiveEsim1),
|
||||||
|
UiccPortInfo(
|
||||||
|
/* iccId = */ "",
|
||||||
|
/* portIndex = */ 1,
|
||||||
|
/* logicalSlotIndex = */ logicalSlotIdx2,
|
||||||
|
/* isActive = */ isActiveEsim2),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
@@ -19,23 +19,17 @@ package com.android.settings.spa.network
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.telephony.SubscriptionInfo
|
import android.telephony.SubscriptionInfo
|
||||||
import android.telephony.SubscriptionManager
|
import android.telephony.SubscriptionManager
|
||||||
import android.view.KeyEvent.ACTION_DOWN
|
|
||||||
import android.view.KeyEvent.KEYCODE_FORWARD_DEL
|
|
||||||
import androidx.compose.runtime.CompositionLocalProvider
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.ui.input.key.KeyEvent
|
|
||||||
import androidx.compose.ui.input.key.NativeKeyEvent
|
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.compose.ui.semantics.SemanticsProperties
|
import androidx.compose.ui.semantics.SemanticsProperties
|
||||||
import androidx.compose.ui.test.assertIsDisplayed
|
import androidx.compose.ui.test.assertIsDisplayed
|
||||||
import androidx.compose.ui.test.assertIsEnabled
|
|
||||||
import androidx.compose.ui.test.assertIsNotEnabled
|
import androidx.compose.ui.test.assertIsNotEnabled
|
||||||
import androidx.compose.ui.test.hasText
|
import androidx.compose.ui.test.hasText
|
||||||
import androidx.compose.ui.test.junit4.createComposeRule
|
import androidx.compose.ui.test.junit4.createComposeRule
|
||||||
import androidx.compose.ui.test.onNodeWithTag
|
import androidx.compose.ui.test.onNodeWithTag
|
||||||
import androidx.compose.ui.test.onNodeWithText
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
import androidx.compose.ui.test.performClick
|
import androidx.compose.ui.test.performClick
|
||||||
import androidx.compose.ui.test.performKeyPress
|
|
||||||
import androidx.compose.ui.test.performTextClearance
|
import androidx.compose.ui.test.performTextClearance
|
||||||
import androidx.compose.ui.test.performTextInput
|
import androidx.compose.ui.test.performTextInput
|
||||||
import androidx.lifecycle.testing.TestLifecycleOwner
|
import androidx.lifecycle.testing.TestLifecycleOwner
|
||||||
@@ -80,7 +74,6 @@ class SimOnboardingLabelSimTest {
|
|||||||
on { targetSubInfo }.doReturn(null)
|
on { targetSubInfo }.doReturn(null)
|
||||||
on { availableSubInfoList }.doReturn(listOf())
|
on { availableSubInfoList }.doReturn(listOf())
|
||||||
on { activeSubInfoList }.doReturn(listOf())
|
on { activeSubInfoList }.doReturn(listOf())
|
||||||
on { slotInfoList }.doReturn(listOf())
|
|
||||||
on { uiccCardInfoList }.doReturn(listOf())
|
on { uiccCardInfoList }.doReturn(listOf())
|
||||||
|
|
||||||
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
||||||
|
@@ -45,7 +45,6 @@ class SimOnboardingPageProviderTest {
|
|||||||
on { targetSubInfo }.doReturn(null)
|
on { targetSubInfo }.doReturn(null)
|
||||||
on { availableSubInfoList }.doReturn(listOf())
|
on { availableSubInfoList }.doReturn(listOf())
|
||||||
on { activeSubInfoList }.doReturn(listOf())
|
on { activeSubInfoList }.doReturn(listOf())
|
||||||
on { slotInfoList }.doReturn(listOf())
|
|
||||||
on { uiccCardInfoList }.doReturn(listOf())
|
on { uiccCardInfoList }.doReturn(listOf())
|
||||||
|
|
||||||
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
||||||
|
@@ -46,7 +46,6 @@ class SimOnboardingPrimarySimTest {
|
|||||||
on { targetSubInfo }.doReturn(null)
|
on { targetSubInfo }.doReturn(null)
|
||||||
on { availableSubInfoList }.doReturn(listOf())
|
on { availableSubInfoList }.doReturn(listOf())
|
||||||
on { activeSubInfoList }.doReturn(listOf())
|
on { activeSubInfoList }.doReturn(listOf())
|
||||||
on { slotInfoList }.doReturn(listOf())
|
|
||||||
on { uiccCardInfoList }.doReturn(listOf())
|
on { uiccCardInfoList }.doReturn(listOf())
|
||||||
|
|
||||||
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
||||||
|
@@ -69,7 +69,6 @@ class SimOnboardingSelectSimTest {
|
|||||||
on { targetSubInfo }.doReturn(null)
|
on { targetSubInfo }.doReturn(null)
|
||||||
on { availableSubInfoList }.doReturn(listOf())
|
on { availableSubInfoList }.doReturn(listOf())
|
||||||
on { activeSubInfoList }.doReturn(listOf())
|
on { activeSubInfoList }.doReturn(listOf())
|
||||||
on { slotInfoList }.doReturn(listOf())
|
|
||||||
on { uiccCardInfoList }.doReturn(listOf())
|
on { uiccCardInfoList }.doReturn(listOf())
|
||||||
|
|
||||||
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
on { targetPrimarySimCalls }.doReturn(PRIMARY_SIM_ASK_EVERY_TIME)
|
||||||
|
@@ -38,8 +38,6 @@ import android.telephony.UiccSlotMapping;
|
|||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
@@ -47,7 +45,6 @@ import org.mockito.Mock;
|
|||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@@ -81,25 +78,6 @@ public class UiccSlotUtilTest {
|
|||||||
when(mSubscriptionManager.getAllSubscriptionInfoList()).thenReturn(mSubscriptionInfoList);
|
when(mSubscriptionManager.getAllSubscriptionInfoList()).thenReturn(mSubscriptionInfoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getSlotInfos_oneSimSlotDevice_returnTheCorrectSlotInfoList() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(oneSimSlotDeviceActivePsim());
|
|
||||||
ImmutableList<UiccSlotInfo> testUiccSlotInfos =
|
|
||||||
UiccSlotUtil.getSlotInfos(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testUiccSlotInfos.size()).isEqualTo(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void getSlotInfos_twoSimSlotsDevice_returnTheCorrectSlotInfoList() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceActivePsimActiveEsim());
|
|
||||||
ImmutableList<UiccSlotInfo> testUiccSlotInfos =
|
|
||||||
UiccSlotUtil.getSlotInfos(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testUiccSlotInfos.size()).isEqualTo(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot0_returnTheCorrectEsimSlot() {
|
public void getEsimSlotId_twoSimSlotsDeviceAndEsimIsSlot0_returnTheCorrectEsimSlot() {
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
||||||
@@ -643,105 +621,7 @@ public class UiccSlotUtilTest {
|
|||||||
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
|
assertThat(testExcludedLogicalSlotIndex).isEqualTo(verifyExcludedLogicalSlotIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_noPsim_returnsFalse() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
oneSimSlotDeviceActiveEsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_activeRemovableEsimAndInactivePsim_returnsFalse() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceActiveRemovableEsimInactivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_activeRemovableEsimAndActivePsim_returnsTrue() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceActivePsimActiveRemovableEsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_inactiveRemovableEsimAndActivePsim_returnsTrue() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceInactiveRemovableEsimActivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_twoActiveRemovableEsimsAndInactivePsim_returnsFalse() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceTwoActiveRemovableEsimsInactivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_oneActiveOneInactiveRemovableEsimActivePsim_returnsTrue() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceOneActiveOneInactiveRemovableEsimsActivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_activePsim_returnsTrue() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
oneSimSlotDeviceActivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_inactivePsim_returnsFalse() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
oneSimSlotDeviceinactivePsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_activeEsimAndActivePsim_returnsTrue() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceActivePsimActiveEsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isTrue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void isRemovableSimEnabled_activeEsimAndInactivePsim_returnsFalse() {
|
|
||||||
when(mTelephonyManager.getUiccSlotsInfo()).thenReturn(
|
|
||||||
twoSimSlotsDeviceInactivePsimActiveEsim());
|
|
||||||
|
|
||||||
boolean testSlot = UiccSlotUtil.isRemovableSimEnabled(mTelephonyManager);
|
|
||||||
|
|
||||||
assertThat(testSlot).isFalse();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void performSwitchToSlot_setSimSlotMapping() throws UiccSlotsException {
|
public void performSwitchToSlot_setSimSlotMapping() throws UiccSlotsException {
|
||||||
@@ -856,13 +736,6 @@ public class UiccSlotUtilTest {
|
|||||||
return slotMap;
|
return slotMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<UiccSlotMapping> createUiccSlotMappingSsModeEsimPort1Active() {
|
|
||||||
List<UiccSlotMapping> slotMap = new ArrayList<>();
|
|
||||||
slotMap.add(new UiccSlotMapping(1, ESIM_PHYSICAL_SLOT, 0));
|
|
||||||
|
|
||||||
return slotMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<UiccSlotMapping> createUiccSlotMappingPsimAndPort0() {
|
private List<UiccSlotMapping> createUiccSlotMappingPsimAndPort0() {
|
||||||
List<UiccSlotMapping> slotMap = new ArrayList<>();
|
List<UiccSlotMapping> slotMap = new ArrayList<>();
|
||||||
slotMap.add(new UiccSlotMapping(0, PSIM_PHYSICAL_SLOT, 0));
|
slotMap.add(new UiccSlotMapping(0, PSIM_PHYSICAL_SLOT, 0));
|
||||||
@@ -915,14 +788,6 @@ public class UiccSlotUtilTest {
|
|||||||
return new UiccSlotInfo[]{createUiccSlotInfo(false, true, 0, true)};
|
return new UiccSlotInfo[]{createUiccSlotInfo(false, true, 0, true)};
|
||||||
}
|
}
|
||||||
|
|
||||||
private UiccSlotInfo[] oneSimSlotDeviceActiveEsim() {
|
|
||||||
return new UiccSlotInfo[]{createUiccSlotInfo(true, false, 1, true)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] oneSimSlotDeviceinactivePsim() {
|
|
||||||
return new UiccSlotInfo[]{createUiccSlotInfo(false, true, -1, false)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveEsim() {
|
private UiccSlotInfo[] twoSimSlotsDeviceActivePsimActiveEsim() {
|
||||||
return new UiccSlotInfo[]{
|
return new UiccSlotInfo[]{
|
||||||
createUiccSlotInfo(false, true, 0, true),
|
createUiccSlotInfo(false, true, 0, true),
|
||||||
@@ -941,61 +806,12 @@ public class UiccSlotUtilTest {
|
|||||||
createUiccSlotInfo(true, true, 1, true)};
|
createUiccSlotInfo(true, true, 1, true)};
|
||||||
}
|
}
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActiveRemovableEsimInactivePsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(true, true, 0, true),
|
|
||||||
createUiccSlotInfo(false, true, -1, false)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceInactiveRemovableEsimActivePsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(true, true, -1, false),
|
|
||||||
createUiccSlotInfo(false, true, 0, true)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceTwoActiveRemovableEsimsInactivePsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfoForRemovableEsimMep(0, true, 1, true),
|
|
||||||
createUiccSlotInfo(false, true, -1, false)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceOneActiveOneInactiveRemovableEsimsActivePsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfoForRemovableEsimMep(1, true, -1, false),
|
|
||||||
createUiccSlotInfo(false, true, 0, true)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() {
|
private UiccSlotInfo[] twoSimSlotsDeviceActiveEsimActivePsim() {
|
||||||
return new UiccSlotInfo[]{
|
return new UiccSlotInfo[]{
|
||||||
createUiccSlotInfo(true, false, 0, true),
|
createUiccSlotInfo(true, false, 0, true),
|
||||||
createUiccSlotInfo(false, true, 1, true)};
|
createUiccSlotInfo(false, true, 1, true)};
|
||||||
}
|
}
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceTwoActiveEsims() {
|
|
||||||
// device supports MEP, so device can enable two esims.
|
|
||||||
// If device has psim slot, the UiccSlotInfo of psim always be in UiccSlotInfo[].
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(false, true, -1, true),
|
|
||||||
createUiccSlotInfoForEsimMep(0, true, 1, true)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceActivePsimInactiveEsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(false, true, 0, true),
|
|
||||||
createUiccSlotInfo(true, false, -1, false)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceInactivePsimActiveEsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(false, true, 0, false),
|
|
||||||
createUiccSlotInfo(true, false, 1, true)};
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo[] twoSimSlotsDeviceNoInsertPsimActiveEsim() {
|
|
||||||
return new UiccSlotInfo[]{
|
|
||||||
createUiccSlotInfo(false, true, -1, false),
|
|
||||||
createUiccSlotInfo(true, false, 1, true)};
|
|
||||||
}
|
|
||||||
//ToDo: add more cases.
|
//ToDo: add more cases.
|
||||||
|
|
||||||
private UiccSlotInfo createUiccSlotInfo(boolean isEuicc, boolean isRemovable,
|
private UiccSlotInfo createUiccSlotInfo(boolean isEuicc, boolean isRemovable,
|
||||||
@@ -1011,36 +827,4 @@ public class UiccSlotUtilTest {
|
|||||||
logicalSlotIdx /* logicalSlotIdx */, isActive /* isActive */))
|
logicalSlotIdx /* logicalSlotIdx */, isActive /* isActive */))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private UiccSlotInfo createUiccSlotInfoForEsimMep(int logicalSlotIdx1, boolean isActiveEsim1,
|
|
||||||
int logicalSlotIdx2, boolean isActiveEsim2) {
|
|
||||||
return new UiccSlotInfo(
|
|
||||||
true, /* isEuicc */
|
|
||||||
"123", /* cardId */
|
|
||||||
CARD_STATE_INFO_PRESENT, /* cardStateInfo */
|
|
||||||
true, /* isExtendApduSupported */
|
|
||||||
false, /* isRemovable */
|
|
||||||
Arrays.asList(
|
|
||||||
new UiccPortInfo("" /* iccId */, 0 /* portIdx */,
|
|
||||||
logicalSlotIdx1 /* logicalSlotIdx */, isActiveEsim1 /* isActive */),
|
|
||||||
new UiccPortInfo("" /* iccId */, 1 /* portIdx */,
|
|
||||||
logicalSlotIdx2 /* logicalSlotIdx */,
|
|
||||||
isActiveEsim2 /* isActive */)));
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiccSlotInfo createUiccSlotInfoForRemovableEsimMep(int logicalSlotIdx1,
|
|
||||||
boolean isActiveEsim1, int logicalSlotIdx2, boolean isActiveEsim2) {
|
|
||||||
return new UiccSlotInfo(
|
|
||||||
true, /* isEuicc */
|
|
||||||
"123", /* cardId */
|
|
||||||
CARD_STATE_INFO_PRESENT, /* cardStateInfo */
|
|
||||||
true, /* isExtendApduSupported */
|
|
||||||
true, /* isRemovable */
|
|
||||||
Arrays.asList(
|
|
||||||
new UiccPortInfo("" /* iccId */, 0 /* portIdx */,
|
|
||||||
logicalSlotIdx1 /* logicalSlotIdx */, isActiveEsim1 /* isActive */),
|
|
||||||
new UiccPortInfo("" /* iccId */, 1 /* portIdx */,
|
|
||||||
logicalSlotIdx2 /* logicalSlotIdx */,
|
|
||||||
isActiveEsim2 /* isActive */)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user