Merge "Fix bug in DevicePickerFragment" into oc-dr1-dev
diff --git a/src/com/android/settings/bluetooth/DevicePickerFragment.java b/src/com/android/settings/bluetooth/DevicePickerFragment.java
index 60470c5..4af3732 100644
--- a/src/com/android/settings/bluetooth/DevicePickerFragment.java
+++ b/src/com/android/settings/bluetooth/DevicePickerFragment.java
@@ -23,6 +23,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
 import android.view.Menu;
 import android.view.MenuInflater;
 
@@ -43,15 +44,18 @@
     private static final String KEY_BT_DEVICE_LIST = "bt_device_list";
     private static final String TAG = "DevicePickerFragment";
 
-    public DevicePickerFragment() {
-        super(null /* Not tied to any user restrictions. */);
-    }
+    @VisibleForTesting
+    BluetoothProgressCategory mAvailableDevicesCategory;
 
     private boolean mNeedAuth;
     private String mLaunchPackage;
     private String mLaunchClass;
     private boolean mScanAllowed;
 
+    public DevicePickerFragment() {
+        super(null /* Not tied to any user restrictions. */);
+    }
+
     @Override
     void initPreferencesFromPreferenceScreen() {
         Intent intent = getActivity().getIntent();
@@ -60,6 +64,7 @@
                 BluetoothDevicePicker.FILTER_TYPE_ALL));
         mLaunchPackage = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_PACKAGE);
         mLaunchClass = intent.getStringExtra(BluetoothDevicePicker.EXTRA_LAUNCH_CLASS);
+        mAvailableDevicesCategory = (BluetoothProgressCategory) findPreference(KEY_BT_DEVICE_LIST);
     }
 
     @Override
@@ -88,6 +93,7 @@
         mSelectedDevice = null;
         if (mScanAllowed) {
             enableScanning();
+            mAvailableDevicesCategory.setProgress(mLocalAdapter.isDiscovering());
         }
     }
 
@@ -123,6 +129,13 @@
         }
     }
 
+    @Override
+    public void onScanningStateChanged(boolean started) {
+        super.onScanningStateChanged(started);
+        started |= mScanEnabled;
+        mAvailableDevicesCategory.setProgress(started);
+    }
+
     public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice,
             int bondState) {
         BluetoothDevice device = cachedDevice.getDevice();
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java
new file mode 100644
index 0000000..3294ffd
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2017 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 org.mockito.Mockito.verify;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.bluetooth.LocalBluetoothAdapter;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DevicePickerFragmentTest {
+    @Mock
+    private LocalBluetoothAdapter mLocalAdapter;
+    @Mock
+    private BluetoothProgressCategory mAvailableDevicesCategory;
+    private DevicePickerFragment mFragment;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+
+        mFragment = new DevicePickerFragment();
+
+        mFragment.mAvailableDevicesCategory = mAvailableDevicesCategory;
+    }
+
+    @Test
+    public void testScanningStateChanged_started_setProgressStarted() {
+        mFragment.mScanEnabled = true;
+
+        mFragment.onScanningStateChanged(true);
+
+        verify(mAvailableDevicesCategory).setProgress(true);
+    }
+}