Merge "Add NPE check when showing error dialog."
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingController.java b/src/com/android/settings/bluetooth/BluetoothPairingController.java
index ef5648c..3c343c7 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingController.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingController.java
@@ -31,6 +31,8 @@
import java.util.Locale;
+import androidx.annotation.VisibleForTesting;
+
/**
* A controller used by {@link BluetoothPairingDialog} to manage connection state while we try to
* pair with a bluetooth device. It includes methods that allow the
@@ -52,8 +54,10 @@
// Bluetooth dependencies for the connection we are trying to establish
private LocalBluetoothManager mBluetoothManager;
- private BluetoothDevice mDevice;
- private int mType;
+ @VisibleForTesting
+ BluetoothDevice mDevice;
+ @VisibleForTesting
+ int mType;
private String mUserInput;
private String mPasskeyFormatted;
private int mPasskey;
@@ -84,7 +88,6 @@
mDeviceName = mBluetoothManager.getCachedDeviceManager().getName(mDevice);
mPbapClientProfile = mBluetoothManager.getProfileManager().getPbapClientProfile();
mPasskeyFormatted = formatKey(mPasskey);
-
}
@Override
@@ -98,12 +101,13 @@
@Override
public void onDialogPositiveClick(BluetoothPairingDialogFragment dialog) {
+ if (mPbapAllowed) {
+ mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
+ } else {
+ mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
+ }
+
if (getDialogType() == USER_ENTRY_DIALOG) {
- if (mPbapAllowed) {
- mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
- } else {
- mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_REJECTED);
- }
onPair(mUserInput);
} else {
onPair(null);
diff --git a/src/com/android/settings/search/Indexable.java b/src/com/android/settings/search/Indexable.java
index e157fac..8048995 100644
--- a/src/com/android/settings/search/Indexable.java
+++ b/src/com/android/settings/search/Indexable.java
@@ -23,6 +23,8 @@
import java.util.List;
+import androidx.annotation.Keep;
+
/**
* Interface for classes whose instances can provide data for indexing.
*
@@ -46,6 +48,7 @@
* @return a list of {@link android.provider.SearchIndexableResource} references.
* Can be null.
*/
+ @Keep
List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled);
/**
@@ -56,6 +59,7 @@
* or not.
* @return a list of {@link SearchIndexableRaw} references. Can be null.
*/
+ @Keep
List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled);
/**
@@ -64,12 +68,14 @@
* @param context the context.
* @return a list of {@link SearchIndexableRaw} references. Can be null.
*/
+ @Keep
List<String> getNonIndexableKeys(Context context);
/**
* @return a list of {@link AbstractPreferenceController} for ResultPayload data during
* Indexing.
*/
+ @Keep
List<AbstractPreferenceController> getPreferenceControllers(Context context);
}
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
new file mode 100644
index 0000000..b28a8b2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingControllerTest.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2018 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.bluetooth;
+
+import static android.bluetooth.BluetoothDevice.PAIRING_VARIANT_CONSENT;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.content.Intent;
+
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowBluetoothPan;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(shadows = {ShadowBluetoothPan.class, ShadowBluetoothAdapter.class})
+public class BluetoothPairingControllerTest {
+ @Mock
+ private BluetoothDevice mBluetoothDevice;
+ private Context mContext;
+ private BluetoothPairingController mBluetoothPairingController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application;
+ final Intent intent = new Intent();
+ intent.putExtra(BluetoothDevice.EXTRA_DEVICE, mBluetoothDevice);
+ mBluetoothPairingController = spy(new BluetoothPairingController(intent, mContext));
+ }
+
+ @Test
+ public void onDialogPositiveClick_confirmationDialog_setPBAP() {
+ mBluetoothPairingController.mType = PAIRING_VARIANT_CONSENT;
+ mBluetoothPairingController.onCheckedChanged(null, true);
+
+ mBluetoothPairingController.onDialogPositiveClick(null);
+
+ verify(mBluetoothDevice).setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java
deleted file mode 100644
index 364083e..0000000
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowMobileNetworkPreferenceController.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.android.settings.testutils.shadow;
-
-import android.content.Context;
-
-import com.android.settings.network.MobileNetworkPreferenceController;
-
-import org.robolectric.annotation.Implementation;
-import org.robolectric.annotation.Implements;
-
-@Implements(MobileNetworkPreferenceController.class)
-public class ShadowMobileNetworkPreferenceController {
- private static boolean mIsRestricted = false;
-
- public void __constructor__(Context context) {
- }
-
- @Implementation
- public boolean isAvailable() {
- return mIsRestricted ? false : true;
- }
-
- @Implementation
- public boolean isUserRestricted() {
- return mIsRestricted;
- }
-
- public static void setRestricted(boolean restricted) {
- mIsRestricted = restricted;
- }
-}