diff --git a/res/values/strings.xml b/res/values/strings.xml
index ae11ac2..fa6e95e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13428,4 +13428,25 @@
     <string name="game_settings_title">Game settings</string>
     <!-- Summary for Game settings entry. [CHAR_LIMIT=NONE] -->
     <string name="game_settings_summary">Turn on Game Dashboard shortcut, etc</string>
+
+    <!-- Bluetooth sim card permission alert for notification title [CHAR LIMIT=none] -->
+    <string name="bluetooth_sim_card_access_notification_title">SIM card access request</string>
+    <!-- Bluetooth sim card permission alert for notification content [CHAR LIMIT=none] -->
+    <string name="bluetooth_sim_card_access_notification_content">A device wants to access your SIM card. Tap for details.</string>
+    <!-- Bluetooth sim card permission alert for dialog title [CHAR LIMIT=none] -->
+    <string name="bluetooth_sim_card_access_dialog_title">Allow access to SIM card?</string>
+    <!-- Bluetooth sim card permission alert for dialog content [CHAR LIMIT=none] -->
+    <string name="bluetooth_sim_card_access_dialog_content">A Bluetooth device, <xliff:g id="device_name" example="My device">%1$s</xliff:g>, wants to access data on your SIM card. This includes your contacts.\n\nWhile connected, <xliff:g id="device_name" example="My device">%2$s</xliff:g> will receive all calls made to <xliff:g id="phone_number" example="0912345678">%3$s</xliff:g>.</string>
+    <!-- Bluetooth connect permission alert for notification title [CHAR LIMIT=none] -->
+    <string name="bluetooth_connect_access_notification_title">Bluetooth device available</string>
+    <!-- Bluetooth connect permission alert for notification content [CHAR LIMIT=none] -->
+    <string name="bluetooth_connect_access_notification_content">A device wants to connect. Tap for details.</string>
+    <!-- Bluetooth connect permission alert for dialog title [CHAR LIMIT=none] -->
+    <string name="bluetooth_connect_access_dialog_title">Connect to Bluetooth device?</string>
+    <!-- Bluetooth connect permission alert for dialog content [CHAR LIMIT=none] -->
+    <string name="bluetooth_connect_access_dialog_content"><xliff:g id="device_name" example="My device">%1$s</xliff:g> wants to connect to this phone.\n\nYou haven\u2019t connected to <xliff:g id="device_name" example="My device">%2$s</xliff:g> before.</string>
+    <!-- Strings for Dialog don't connect button -->
+    <string name="bluetooth_connect_access_dialog_negative">Don\u2019t connect</string>
+    <!-- Strings for Dialog connect button -->
+    <string name="bluetooth_connect_access_dialog_positive">Connect</string>
 </resources>
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
index 8794b08..211bcc6 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
@@ -25,6 +25,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.view.View;
 import android.widget.Button;
@@ -94,13 +95,13 @@
         if(DEBUG) Log.i(TAG, "onCreate() Request type: " + mRequestType);
 
         if (mRequestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) {
-            showDialog(getString(R.string.bluetooth_connection_permission_request), mRequestType);
+            showDialog(getString(R.string.bluetooth_connect_access_dialog_title), mRequestType);
         } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS) {
             showDialog(getString(R.string.bluetooth_phonebook_access_dialog_title), mRequestType);
         } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS) {
             showDialog(getString(R.string.bluetooth_message_access_dialog_title), mRequestType);
         } else if (mRequestType == BluetoothDevice.REQUEST_TYPE_SIM_ACCESS) {
-            showDialog(getString(R.string.bluetooth_sap_request), mRequestType);
+            showDialog(getString(R.string.bluetooth_sim_card_access_dialog_title), mRequestType);
         }
         else {
             Log.e(TAG, "Error: bad request type: " + mRequestType);
@@ -133,9 +134,14 @@
             p.mView = createSapDialogView();
             break;
         }
-        p.mPositiveButtonText = getString(R.string.allow);
+        p.mPositiveButtonText = getString(
+                requestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION
+                        ? R.string.bluetooth_connect_access_dialog_positive : R.string.allow);
         p.mPositiveButtonListener = this;
-        p.mNegativeButtonText = getString(R.string.request_manage_bluetooth_permission_dont_allow);
+        p.mNegativeButtonText = getString(
+                requestType == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION
+                        ? R.string.bluetooth_connect_access_dialog_negative
+                        : R.string.request_manage_bluetooth_permission_dont_allow);
         p.mNegativeButtonListener = this;
         mOkButton = mAlert.getButton(DialogInterface.BUTTON_POSITIVE);
         setupAlert();
@@ -156,8 +162,8 @@
         String mRemoteName = Utils.createRemoteName(this, mDevice);
         mView = getLayoutInflater().inflate(R.layout.bluetooth_access, null);
         messageView = (TextView)mView.findViewById(R.id.message);
-        messageView.setText(getString(R.string.bluetooth_connection_dialog_text,
-                mRemoteName));
+        messageView.setText(getString(R.string.bluetooth_connect_access_dialog_content,
+                mRemoteName, mRemoteName));
         return mView;
     }
 
@@ -181,10 +187,11 @@
 
     private View createSapDialogView() {
         String mRemoteName = Utils.createRemoteName(this, mDevice);
+        TelephonyManager tm = getSystemService(TelephonyManager.class);
         mView = getLayoutInflater().inflate(R.layout.bluetooth_access, null);
         messageView = (TextView)mView.findViewById(R.id.message);
-        messageView.setText(getString(R.string.bluetooth_sap_acceptance_dialog_text,
-                mRemoteName, mRemoteName));
+        messageView.setText(getString(R.string.bluetooth_sim_card_access_dialog_content,
+                mRemoteName, mRemoteName, tm.getLine1Number()));
         return mView;
     }
 
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
index 66665f0..ff1c147 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionRequest.java
@@ -144,13 +144,17 @@
                                 R.string.bluetooth_message_access_notification_content);
                         break;
                     case BluetoothDevice.REQUEST_TYPE_SIM_ACCESS:
-                        title = context.getString(R.string.bluetooth_sap_request);
-                        message = context.getString(R.string.bluetooth_sap_acceptance_dialog_text,
+                        title = context.getString(
+                                R.string.bluetooth_sim_card_access_notification_title);
+                        message = context.getString(
+                                R.string.bluetooth_sim_card_access_notification_content,
                                 deviceAlias, deviceAlias);
                         break;
                     default:
-                        title = context.getString(R.string.bluetooth_connection_permission_request);
-                        message = context.getString(R.string.bluetooth_connection_dialog_text,
+                        title = context.getString(
+                                R.string.bluetooth_connect_access_notification_title);
+                        message = context.getString(
+                                R.string.bluetooth_connect_access_notification_content,
                                 deviceAlias, deviceAlias);
                         break;
                 }
diff --git a/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
index 2ab0239..5d5a2a5 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceController.java
@@ -75,7 +75,7 @@
         mStorageAdapter.addAll(storageEntries);
 
         if (mSpinnerPreference != null) {
-            mSpinnerPreference.setClickable(mStorageAdapter.getCount() > 1);
+            mSpinnerPreference.setVisible(mStorageAdapter.getCount() > 1);
         }
     }
 
@@ -97,7 +97,7 @@
         mSpinnerPreference = screen.findPreference(getPreferenceKey());
         mSpinnerPreference.setAdapter(mStorageAdapter);
         mSpinnerPreference.setOnItemSelectedListener(this);
-        mSpinnerPreference.setClickable(mStorageAdapter.getCount() > 1);
+        mSpinnerPreference.setVisible(mStorageAdapter.getCount() > 1);
     }
 
     @Override
diff --git a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
index 86351cb..f4661ef 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/storage/StorageSelectionPreferenceControllerTest.java
@@ -18,6 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.mock;
+
 import android.content.Context;
 import android.os.Looper;
 import android.os.storage.StorageManager;
@@ -33,6 +35,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -47,9 +50,20 @@
 
     @Before
     public void setUp() throws Exception {
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
         mContext = ApplicationProvider.getApplicationContext();
         mStorageManager = mContext.getSystemService(StorageManager.class);
         mController = new StorageSelectionPreferenceController(mContext, PREFERENCE_KEY);
+
+        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
+        final PreferenceScreen preferenceScreen =
+                preferenceManager.createPreferenceScreen(mContext);
+        final SettingsSpinnerPreference spinnerPreference = new SettingsSpinnerPreference(mContext);
+        spinnerPreference.setKey(PREFERENCE_KEY);
+        preferenceScreen.addPreference(spinnerPreference);
+        mController.displayPreference(preferenceScreen);
     }
 
     @Test
@@ -70,16 +84,6 @@
 
     @Test
     public void setSelectedStorageEntry_primaryStorage_correctSelectedAdapterItem() {
-        if (Looper.myLooper() == null) {
-            Looper.prepare();
-        }
-        final PreferenceManager preferenceManager = new PreferenceManager(mContext);
-        final PreferenceScreen preferenceScreen =
-                preferenceManager.createPreferenceScreen(mContext);
-        final SettingsSpinnerPreference spinnerPreference = new SettingsSpinnerPreference(mContext);
-        spinnerPreference.setKey(PREFERENCE_KEY);
-        preferenceScreen.addPreference(spinnerPreference);
-        mController.displayPreference(preferenceScreen);
         final StorageEntry primaryStorageEntry =
                 StorageEntry.getDefaultInternalStorageEntry(mContext);
         mController.setStorageEntries(mStorageManager.getVolumes().stream()
@@ -91,5 +95,26 @@
         assertThat((StorageEntry) mController.mSpinnerPreference.getSelectedItem())
                 .isEqualTo(primaryStorageEntry);
     }
+
+    @Test
+    public void setStorageEntries_1StorageEntry_preferenceInvisible() {
+        final List<StorageEntry> storageEntries = new ArrayList<>();
+        storageEntries.add(mock(StorageEntry.class));
+
+        mController.setStorageEntries(storageEntries);
+
+        assertThat(mController.mSpinnerPreference.isVisible()).isFalse();
+    }
+
+    @Test
+    public void setStorageEntries_2StorageEntries_preferenceVisible() {
+        final List<StorageEntry> storageEntries = new ArrayList<>();
+        storageEntries.add(mock(StorageEntry.class));
+        storageEntries.add(mock(StorageEntry.class));
+
+        mController.setStorageEntries(storageEntries);
+
+        assertThat(mController.mSpinnerPreference.isVisible()).isTrue();
+    }
 }
 
