diff --git a/src/com/android/phone/PhoneSearchIndexablesProvider.java b/src/com/android/phone/PhoneSearchIndexablesProvider.java
index c066acd..22786a3 100644
--- a/src/com/android/phone/PhoneSearchIndexablesProvider.java
+++ b/src/com/android/phone/PhoneSearchIndexablesProvider.java
@@ -31,6 +31,7 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.database.MatrixCursor;
+import android.os.Binder;
 import android.os.UserManager;
 import android.provider.SearchIndexableResource;
 import android.provider.SearchIndexablesContract.RawData;
@@ -97,28 +98,34 @@
 
     @Override
     public Cursor queryNonIndexableKeys(String[] projection) {
-        MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
+        final long uidToken = Binder.clearCallingIdentity();
+        try {
+            MatrixCursor cursor = new MatrixCursor(NON_INDEXABLES_KEYS_COLUMNS);
 
-        if (!mUserManager.isAdminUser()) {
-            final String[] values = new String[]{"preferred_network_mode_key", "button_roaming_key",
-                    "cdma_lte_data_service_key", "enabled_networks_key", "enhanced_4g_lte",
-                    "button_apn_key", "button_carrier_sel_key", "carrier_settings_key",
-                    "cdma_system_select_key", "esim_list_profile", "mobile_data_enable",
-                    "data_usage_summary", "wifi_calling_key", "video_calling_key"};
-            for (String nik : values) {
-                cursor.addRow(createNonIndexableRow(nik));
+            if (!mUserManager.isAdminUser()) {
+                final String[] values = new String[]{"preferred_network_mode_key",
+                        "button_roaming_key",
+                        "cdma_lte_data_service_key", "enabled_networks_key", "enhanced_4g_lte",
+                        "button_apn_key", "button_carrier_sel_key", "carrier_settings_key",
+                        "cdma_system_select_key", "esim_list_profile", "mobile_data_enable",
+                        "data_usage_summary", "wifi_calling_key", "video_calling_key"};
+                for (String nik : values) {
+                    cursor.addRow(createNonIndexableRow(nik));
+                }
+            } else {
+                if (isEuiccSettingsHidden()) {
+                    cursor.addRow(createNonIndexableRow("esim_list_profile" /* key */));
+                }
+                if (isEnhanced4gLteHidden()) {
+                    cursor.addRow(createNonIndexableRow("enhanced_4g_lte" /* key */));
+                }
             }
-        } else {
-            if (isEuiccSettingsHidden()) {
-                cursor.addRow(createNonIndexableRow("esim_list_profile" /* key */));
-            }
-            if (isEnhanced4gLteHidden()) {
-                cursor.addRow(createNonIndexableRow("enhanced_4g_lte" /* key */));
-            }
+            cursor.addRow(createNonIndexableRow("carrier_settings_euicc_key" /* key */));
+            cursor.addRow(createNonIndexableRow("advanced_options" /* key */));
+            return cursor;
+        } finally {
+            Binder.restoreCallingIdentity(uidToken);
         }
-        cursor.addRow(createNonIndexableRow("carrier_settings_euicc_key" /* key */));
-        cursor.addRow(createNonIndexableRow("advanced_options" /* key */));
-        return cursor;
     }
 
     @VisibleForTesting boolean isEuiccSettingsHidden() {
