From eb230c76d959ad552986d519c618962fe02cd3ec Mon Sep 17 00:00:00 2001 From: timhypeng Date: Wed, 19 Sep 2018 15:54:13 +0800 Subject: [PATCH] Fix the logic error on PBAP permission assignment -add test case Bug: 114808220 Test: make -j42 RunSettingsRoboTests Change-Id: Id77ade12c28e31a21c1c7a5dcb28906112d3465b --- .../bluetooth/BluetoothPairingController.java | 23 ++++++----- .../BluetoothPairingControllerTest.java | 39 ++++++++++++++++++- 2 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java index c39f1d9feb0..94bdfe8f753 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingController.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java @@ -54,8 +54,7 @@ public class BluetoothPairingController implements OnCheckedChangeListener, // 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 class BluetoothPairingController implements OnCheckedChangeListener, * */ 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 b28a8b2b825..5233d840858 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 @@ package com.android.settings.bluetooth; 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 @@ import org.robolectric.annotation.Config; @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 @@ public class BluetoothPairingControllerTest { 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 @@ public class BluetoothPairingControllerTest { 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); + } }