diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index f1c91ee..678f81f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5187,15 +5187,6 @@
         <activity android:name=".spa.SpaBridgeActivity" android:exported="false"/>
         <activity android:name=".spa.SpaAppBridgeActivity" android:exported="false"/>
 
-        <activity
-            android:name=".spa.search.SpaSearchLandingActivity"
-            android:exported="true">
-            <intent-filter android:priority="1">
-                <action android:name="android.settings.SPA_SEARCH_LANDING" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
         <activity android:name=".Settings$FingerprintSettingsActivityV2"
             android:label="@string/security_settings_fingerprint_preference_title"
             android:exported="false"
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.kt b/src/com/android/settings/search/SearchFeatureProviderImpl.kt
index b1378ab..2ea9910 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.kt
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.kt
@@ -22,18 +22,11 @@
 import android.net.Uri
 import android.provider.Settings
 import com.android.settings.search.SearchIndexableResourcesFactory.createSearchIndexableResources
-import com.android.settings.spa.search.SpaSearchRepository
 import com.android.settingslib.search.SearchIndexableResources
 
 /** FeatureProvider for the refactored search code. */
 open class SearchFeatureProviderImpl : SearchFeatureProvider {
-    private val lazySearchIndexableResources by lazy {
-        createSearchIndexableResources().apply {
-            for (searchIndexableData in SpaSearchRepository().getSearchIndexableDataList()) {
-                addIndex(searchIndexableData)
-            }
-        }
-    }
+    private val lazySearchIndexableResources by lazy { createSearchIndexableResources() }
 
     override fun verifyLaunchSearchResultPageCaller(context: Context, callerPackage: String) {
         require(callerPackage.isNotEmpty()) {
diff --git a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt
index b9a375c..873a2c3 100644
--- a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt
+++ b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt
@@ -46,14 +46,10 @@
 import androidx.lifecycle.compose.collectAsStateWithLifecycle
 import androidx.lifecycle.viewmodel.compose.viewModel
 import com.android.settings.R
-import com.android.settings.flags.Flags
 import com.android.settings.network.SubscriptionInfoListViewModel
-import com.android.settings.network.SubscriptionUtil
 import com.android.settings.network.telephony.DataSubscriptionRepository
 import com.android.settings.network.telephony.MobileDataRepository
-import com.android.settings.network.telephony.requireSubscriptionManager
 import com.android.settings.spa.network.PrimarySimRepository.PrimarySimInfo
-import com.android.settings.spa.search.SearchablePage
 import com.android.settings.wifi.WifiPickerTrackerHelper
 import com.android.settingslib.spa.framework.common.SettingsEntryBuilder
 import com.android.settingslib.spa.framework.common.SettingsPageProvider
@@ -66,7 +62,6 @@
 import com.android.settingslib.spa.widget.scaffold.RegularScaffold
 import com.android.settingslib.spa.widget.ui.Category
 import com.android.settingslib.spaprivileged.framework.common.broadcastReceiverFlow
-import com.android.settingslib.spaprivileged.framework.common.userManager
 import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBooleanFlow
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -83,7 +78,7 @@
 /**
  * Showing the sim onboarding which is the process flow of sim switching on.
  */
-open class NetworkCellularGroupProvider : SettingsPageProvider, SearchablePage {
+open class NetworkCellularGroupProvider : SettingsPageProvider {
     override val name = fileName
     override val metricsCategory = SettingsEnums.MOBILE_NETWORK_LIST
     private val owner = createSettingsPage()
@@ -196,24 +191,8 @@
     open fun OtherSection(){
         // Do nothing
     }
-
-    override fun getSearchableTitles(context: Context): List<String> {
-        if (!isPageSearchable(context)) return emptyList()
-        return buildList {
-            if (context.requireSubscriptionManager().activeSubscriptionInfoCount > 0) {
-                add(context.getString(R.string.mobile_data_settings_title))
-            }
-        }
-    }
-
     companion object {
         const val fileName = "NetworkCellularGroupProvider"
-
-        private fun isPageSearchable(context: Context) =
-            Flags.isDualSimOnboardingEnabled() &&
-            SubscriptionUtil.isSimHardwareVisible(context) &&
-                !com.android.settingslib.Utils.isWifiOnly(context) &&
-                context.userManager.isAdminUser
     }
 }
 
diff --git a/src/com/android/settings/spa/search/SearchablePage.kt b/src/com/android/settings/spa/search/SearchablePage.kt
deleted file mode 100644
index 2364514..0000000
--- a/src/com/android/settings/spa/search/SearchablePage.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.spa.search
-
-import android.content.Context
-
-interface SearchablePage {
-
-    /** Gets the searchable titles at the current moment. */
-    fun getSearchableTitles(context: Context): List<String>
-}
diff --git a/src/com/android/settings/spa/search/SpaSearchLandingActivity.kt b/src/com/android/settings/spa/search/SpaSearchLandingActivity.kt
deleted file mode 100644
index 8c2bc37..0000000
--- a/src/com/android/settings/spa/search/SpaSearchLandingActivity.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.spa.search
-
-import android.app.Activity
-import android.os.Bundle
-import com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY
-import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
-import com.android.settings.password.PasswordUtils
-import com.android.settings.spa.SpaDestination
-
-class SpaSearchLandingActivity : Activity() {
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        if (!isValidCall()) return
-
-        val destination = intent.getStringExtra(EXTRA_FRAGMENT_ARG_KEY)
-        if (destination.isNullOrBlank()) return
-
-        SpaDestination(destination = destination, highlightMenuKey = null)
-            .startFromExportedActivity(this)
-        finish()
-    }
-
-    private fun isValidCall() =
-        PasswordUtils.getCallingAppPackageName(activityToken) ==
-            featureFactory.searchFeatureProvider.getSettingsIntelligencePkgName(this)
-}
diff --git a/src/com/android/settings/spa/search/SpaSearchRepository.kt b/src/com/android/settings/spa/search/SpaSearchRepository.kt
deleted file mode 100644
index d37c50c..0000000
--- a/src/com/android/settings/spa/search/SpaSearchRepository.kt
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * 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.spa.search
-
-import android.content.Context
-import android.provider.SearchIndexableResource
-import android.util.Log
-import androidx.annotation.VisibleForTesting
-import com.android.settingslib.search.Indexable
-import com.android.settingslib.search.SearchIndexableData
-import com.android.settingslib.search.SearchIndexableRaw
-import com.android.settingslib.spa.framework.common.SettingsPageProvider
-import com.android.settingslib.spa.framework.common.SpaEnvironment
-import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
-
-class SpaSearchRepository(
-    private val spaEnvironment: SpaEnvironment = SpaEnvironmentFactory.instance,
-) {
-    fun getSearchIndexableDataList(): List<SearchIndexableData> {
-        Log.d(TAG, "getSearchIndexableDataList")
-        return spaEnvironment.pageProviderRepository.value.getAllProviders().mapNotNull { page ->
-            if (page is SearchablePage) {
-                page.createSearchIndexableData(page::getSearchableTitles)
-            } else null
-        }
-    }
-
-    companion object {
-        private const val TAG = "SpaSearchRepository"
-
-        @VisibleForTesting
-        fun SettingsPageProvider.createSearchIndexableData(
-            titlesProvider: (context: Context) -> List<String>,
-        ): SearchIndexableData {
-            val searchIndexProvider =
-                object : Indexable.SearchIndexProvider {
-                    override fun getXmlResourcesToIndex(
-                        context: Context,
-                        enabled: Boolean,
-                    ): List<SearchIndexableResource> = emptyList()
-
-                    override fun getRawDataToIndex(
-                        context: Context,
-                        enabled: Boolean,
-                    ): List<SearchIndexableRaw> = emptyList()
-
-                    override fun getDynamicRawDataToIndex(
-                        context: Context,
-                        enabled: Boolean,
-                    ): List<SearchIndexableRaw> =
-                        titlesProvider(context).map { title ->
-                            createSearchIndexableRaw(context, title)
-                        }
-
-                    override fun getNonIndexableKeys(context: Context): List<String> = emptyList()
-                }
-            return SearchIndexableData(this::class.java, searchIndexProvider)
-        }
-
-        private fun SettingsPageProvider.createSearchIndexableRaw(context: Context, title: String) =
-            SearchIndexableRaw(context).apply {
-                key = name
-                this.title = title
-                intentAction = SEARCH_LANDING_ACTION
-                packageName = context.packageName
-                className = SpaSearchLandingActivity::class.qualifiedName
-            }
-
-        private const val SEARCH_LANDING_ACTION = "android.settings.SPA_SEARCH_LANDING"
-    }
-}
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index b555f00..e408cd0 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -29,7 +29,6 @@
 import android.text.TextUtils;
 
 import com.android.settings.network.NetworkProviderSettings;
-import com.android.settings.spa.search.SearchablePage;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.FakeIndexProvider;
 import com.android.settingslib.search.SearchIndexableData;
@@ -118,10 +117,8 @@
     public void testAllClassNamesHaveProviders() {
         for (SearchIndexableData data :
                 mSearchProvider.getSearchIndexableResources().getProviderValues()) {
-            Class<?> targetClass = data.getTargetClass();
-            if (DatabaseIndexingUtils.getSearchIndexProvider(targetClass) == null
-                    && !SearchablePage.class.isAssignableFrom(targetClass)) {
-                fail(targetClass.getName() + " is not an index provider");
+            if (DatabaseIndexingUtils.getSearchIndexProvider(data.getTargetClass()) == null) {
+                fail(data.getTargetClass().getName() + "is not an index provider");
             }
         }
     }
diff --git a/tests/spa_unit/src/com/android/settings/spa/search/SpaSearchRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/spa/search/SpaSearchRepositoryTest.kt
deleted file mode 100644
index 911dfd2..0000000
--- a/tests/spa_unit/src/com/android/settings/spa/search/SpaSearchRepositoryTest.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.spa.search
-
-import android.content.Context
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.android.settings.spa.search.SpaSearchRepository.Companion.createSearchIndexableData
-import com.android.settingslib.spa.framework.common.SettingsPageProvider
-import com.google.common.truth.Truth.assertThat
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.mockito.kotlin.mock
-
-@RunWith(AndroidJUnit4::class)
-class SpaSearchRepositoryTest {
-
-    @Test
-    fun createSearchIndexableData() {
-        val pageProvider =
-            object : SettingsPageProvider {
-                override val name = PAGE_NAME
-            }
-
-        val searchIndexableData = pageProvider.createSearchIndexableData { listOf(TITLE) }
-        val dynamicRawDataToIndex =
-            searchIndexableData.searchIndexProvider.getDynamicRawDataToIndex(mock<Context>(), true)
-
-        assertThat(searchIndexableData.targetClass).isEqualTo(pageProvider::class.java)
-        assertThat(dynamicRawDataToIndex).hasSize(1)
-        assertThat(dynamicRawDataToIndex[0].title).isEqualTo(TITLE)
-    }
-
-    private companion object {
-        const val PAGE_NAME = "PageName"
-        const val TITLE = "Title"
-    }
-}
