diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index c39f1d9..94bdfe8 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -54,8 +54,7 @@
 
     // Bluetooth dependencies for the connection we are trying to establish
     private LocalBluetoothManager mBluetoothManager;
-    @VisibleForTesting
-    BluetoothDevice mDevice;
+    private BluetoothDevice mDevice;
     @VisibleForTesting
     int mType;
     private String mUserInput;
@@ -189,16 +188,16 @@
      *
      */
      public void  setContactSharingState() {
-        if ((mDevice.getPhonebookAccessPermission() != BluetoothDevice.ACCESS_ALLOWED)
-                && (mDevice.getPhonebookAccessPermission() != BluetoothDevice.ACCESS_REJECTED)) {
-                 if (mDevice.getBluetoothClass().getDeviceClass()
-                        == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE) {
-                    onCheckedChanged(null, true);
-            } else {
-                onCheckedChanged(null, false);
-            }
-        }
-    }
+         final int permission = mDevice.getPhonebookAccessPermission();
+         if (permission == BluetoothDevice.ACCESS_ALLOWED
+                 || (permission == BluetoothDevice.ACCESS_UNKNOWN && mDevice.getBluetoothClass().
+                        getDeviceClass() == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE)) {
+             onCheckedChanged(null, true);
+         } else {
+             onCheckedChanged(null, false);
+         }
+
+     }
 
     /**
      * A method for querying if the provided editable is a valid passkey/pin format for this device.
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
index b28a8b2..5233d84 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
@@ -17,9 +17,10 @@
 
 import static android.bluetooth.BluetoothDevice.PAIRING_VARIANT_CONSENT;
 
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.content.Context;
 import android.content.Intent;
@@ -39,6 +40,8 @@
 @RunWith(SettingsRobolectricTestRunner.class)
 @Config(shadows = {ShadowBluetoothPan.class, ShadowBluetoothAdapter.class})
 public class BluetoothPairingControllerTest {
+    private final BluetoothClass mBluetoothClass =
+            new BluetoothClass(BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE);
     @Mock
     private BluetoothDevice mBluetoothDevice;
     private Context mContext;
@@ -51,7 +54,7 @@
         mContext = RuntimeEnvironment.application;
         final Intent intent = new Intent();
         intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mBluetoothDevice);
-        mBluetoothPairingController = spy(new BluetoothPairingController(intent, mContext));
+        mBluetoothPairingController = new BluetoothPairingController(intent, mContext);
     }
 
     @Test
@@ -63,4 +66,36 @@
 
         verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
     }
+
+    @Test
+    public void onSetContactSharingState_permissionAllowed_setPBAPAllowed() {
+        when(mBluetoothDevice.getPhonebookAccessPermission()).thenReturn(
+                BluetoothDevice.ACCESS_ALLOWED);
+        mBluetoothPairingController.setContactSharingState();
+        mBluetoothPairingController.onDialogPositiveClick(null);
+
+        verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
+    }
+
+    @Test
+    public void onSetContactSharingState_permissionUnknown_audioVideoHandsfree_setPBAPAllowed() {
+        when(mBluetoothDevice.getPhonebookAccessPermission()).thenReturn(
+                BluetoothDevice.ACCESS_UNKNOWN);
+        when(mBluetoothDevice.getBluetoothClass()).thenReturn(mBluetoothClass);
+        mBluetoothPairingController.setContactSharingState();
+        mBluetoothPairingController.onDialogPositiveClick(null);
+
+        verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
+    }
+
+    @Test
+    public void onSetContactSharingState_permissionRejected_setPBAPRejected() {
+        when(mBluetoothDevice.getPhonebookAccessPermission()).thenReturn(
+                BluetoothDevice.ACCESS_REJECTED);
+        when(mBluetoothDevice.getBluetoothClass()).thenReturn(mBluetoothClass);
+        mBluetoothPairingController.setContactSharingState();
+        mBluetoothPairingController.onDialogPositiveClick(null);
+
+        verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
+    }
 }
