diff --git a/res/values/strings.xml b/res/values/strings.xml
index fbae24180a5..9cae3dc1541 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6530,7 +6530,11 @@
face, unlock, auth, sign in
face, unlock, auth, sign in, fingerprint, biometric
imei, meid, min, prl version, imei sv
- network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid
+ network, mobile network state, service state, signal strength, mobile network type, roaming
+ network, mobile network state, service state, signal strength, mobile network type, roaming, eid
+ network, mobile network state, service state, signal strength, mobile network type, roaming, iccid
+ network, mobile network state, service state, signal strength, mobile network type, roaming, iccid, eid
+ eid
serial number, hardware version
android security patch level, baseband version, kernel version
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
index b75853de788..16f04dfc60c 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
@@ -31,6 +31,7 @@ import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.Utils;
+import com.android.settingslib.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.List;
@@ -159,4 +160,28 @@ public class SimStatusPreferenceController extends BasePreferenceController {
Preference createNewPreference(Context context) {
return new Preference(context);
}
+
+ @Override
+ public void updateDynamicRawDataToIndex(List rawData) {
+ int simSlot = getSimSlotIndex();
+ SubscriptionInfo subInfo = getSubscriptionInfo(simSlot);
+ if (subInfo == null) {
+ /**
+ * Only add to search when SIM is active
+ * (presented in SIM Slot Status as availavle.)
+ */
+ return;
+ }
+
+ /* Have different search keywork when comes to eSIM */
+ int keywordId = subInfo.isEmbedded() ?
+ R.string.keywords_sim_status_esim : R.string.keywords_sim_status;
+
+ SearchIndexableRaw data = new SearchIndexableRaw(mContext);
+ data.key = getPreferenceKey();
+ data.title = getPreferenceTitle(simSlot);
+ data.screenTitle = mContext.getString(R.string.about_settings);
+ data.keywords = mContext.getString(keywordId).toString();
+ rawData.add(data);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
index 9d4956d6d74..eea07fe1cf8 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.deviceinfo.simstatus;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
@@ -26,6 +28,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
import android.os.UserManager;
+import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -37,6 +40,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.List;
@@ -62,6 +66,10 @@ public class SimStatusPreferenceControllerTest {
@Mock
private PreferenceScreen mScreen;
@Mock
+ private SubscriptionManager mSubscriptionManager;
+ @Mock
+ private SubscriptionInfo mSubscriptionInfo;
+ @Mock
private TelephonyManager mTelephonyManager;
@Mock
private UserManager mUserManager;
@@ -85,6 +93,8 @@ public class SimStatusPreferenceControllerTest {
when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
mockService(Context.TELEPHONY_SERVICE, TelephonyManager.class, mTelephonyManager);
+ mockService(Context.TELEPHONY_SUBSCRIPTION_SERVICE, SubscriptionManager.class,
+ mSubscriptionManager);
mockService(Context.USER_SERVICE, UserManager.class, mUserManager);
final List preferencePool = new ArrayList();
@@ -96,6 +106,10 @@ public class SimStatusPreferenceControllerTest {
public Preference createNewPreference(Context context) {
return preferencePool.remove(0);
}
+ @Override
+ public int getSimSlotIndex() {
+ return 0;
+ }
});
doReturn(BasePreferenceController.AVAILABLE).when(mController).getAvailabilityStatus();
when(mScreen.getContext()).thenReturn(mContext);
@@ -163,6 +177,47 @@ public class SimStatusPreferenceControllerTest {
verify(mFragment).getChildFragmentManager();
}
+ @Test
+ public void updateDynamicRawDataToIndex_notAddToSearch_emptySimSlot() {
+ doReturn(null).when(mSubscriptionManager).getActiveSubscriptionInfoList();
+ SlotSimStatus slotSimStatus = new SlotSimStatus(mContext);
+ List rawData = new ArrayList();
+
+ mController.init(mFragment, slotSimStatus);
+ mController.updateDynamicRawDataToIndex(rawData);
+
+ assertThat(rawData.size()).isEqualTo(0);
+ }
+
+ @Test
+ public void updateDynamicRawDataToIndex_addToSearch_simInSimSlot() {
+ doReturn(false).when(mSubscriptionInfo).isEmbedded();
+ doReturn(List.of(mSubscriptionInfo)).when(mSubscriptionManager)
+ .getActiveSubscriptionInfoList();
+ SlotSimStatus slotSimStatus = new SlotSimStatus(mContext);
+ List rawData = new ArrayList();
+
+ mController.init(mFragment, slotSimStatus);
+ mController.updateDynamicRawDataToIndex(rawData);
+
+ assertThat(rawData.size()).isEqualTo(1);
+ }
+
+ @Test
+ public void updateDynamicRawDataToIndex_addEsimToSearch_esimInSimSlot() {
+ doReturn(true).when(mSubscriptionInfo).isEmbedded();
+ doReturn(List.of(mSubscriptionInfo)).when(mSubscriptionManager)
+ .getActiveSubscriptionInfoList();
+ SlotSimStatus slotSimStatus = new SlotSimStatus(mContext);
+ List rawData = new ArrayList();
+
+ mController.init(mFragment, slotSimStatus);
+ mController.updateDynamicRawDataToIndex(rawData);
+
+ assertThat(rawData.size()).isEqualTo(1);
+ assertThat(rawData.get(0).keywords.contains("eid")).isTrue();
+ }
+
private void mockService(String serviceName, Class serviceClass, T service) {
when(mContext.getSystemServiceName(serviceClass)).thenReturn(serviceName);
when(mContext.getSystemService(serviceName)).thenReturn(service);