Update "Previous connected device" preference
1. Show up to 3 devices in main page
2. Add "See all" preference to go ot detail page
Bug: 116350449
Test: Screenshot && RunSettingsRoboTests
Change-Id: Iee0de8a2b7f2543e946a117ba2d9ca9dde6c8678
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7308de7..a99c9d77 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -414,6 +414,9 @@
<!-- Toast text for hint user bluetooth is turned on [CHAR LIMIT=none]-->
<string name="connected_device_bluetooth_turned_on_toast">Bluetooth turned on</string>
+ <!-- Title to see all the previous connected devices [CHAR LIMIT=50] -->
+ <string name="previous_connected_see_all">See all</string>
+
<!-- Date & time settings screen title -->
<string name="date_and_time">Date & time</string>
<!-- The title of the activity to pick a time zone. -->
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 424ca75..29c9e01 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -41,18 +41,24 @@
settings:useAdminDisabledSummary="true"
settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
- <Preference
+ <PreferenceCategory
android:key="previously_connected_devices"
android:title="@string/connected_device_previously_connected_title"
- android:icon="@drawable/ic_devices_other_black"
- android:fragment="com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment"
- settings:allowDividerAbove="true"
- settings:controller="com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceController"/>
+ settings:controller="com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceController">
+
+ <Preference
+ android:key="previously_connected_devices_see_all"
+ android:title="@string/previous_connected_see_all"
+ android:icon="@drawable/ic_chevron_right_24dp"
+ android:order="10"
+ android:fragment="com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment"/>
+ </PreferenceCategory>
<Preference
android:key="connection_preferences"
android:title="@string/connected_device_connections_title"
android:fragment="com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment"
+ settings:allowDividerAbove="true"
settings:controller="com.android.settings.connecteddevice.AdvancedConnectedDeviceController"/>
</PreferenceScreen>
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
index 297c90b..4cc329c 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -269,7 +269,8 @@
final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) {
Log.d(TAG, "isDeviceConnected() device name : " + cachedDevice.getName() +
- ", is connected : " + device.isConnected());
+ ", is connected : " + device.isConnected() + " , is profile connected : "
+ + cachedDevice.isConnected());
}
return device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
}
diff --git a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
index 8c6d3f2..6d034fd 100644
--- a/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
+++ b/src/com/android/settings/bluetooth/SavedBluetoothDeviceUpdater.java
@@ -43,7 +43,8 @@
final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) {
Log.d(TAG, "isFilterMatched() device name : " + cachedDevice.getName() +
- ", is connected : " + device.isConnected());
+ ", is connected : " + device.isConnected() + ", is profile connected : "
+ + cachedDevice.isConnected());
}
return device.getBondState() == BluetoothDevice.BOND_BONDED && !device.isConnected();
}
diff --git a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
index 5f6ffb2..ffcd1fc 100644
--- a/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
+++ b/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceController.java
@@ -20,6 +20,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
@@ -35,7 +36,9 @@
public class PreviouslyConnectedDevicePreferenceController extends BasePreferenceController
implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback {
- private Preference mPreference;
+ private static final int MAX_DEVICE_NUM = 3;
+
+ private PreferenceGroup mPreferenceGroup;
private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
private DockUpdater mSavedDockUpdater;
private int mPreferenceSize;
@@ -57,8 +60,10 @@
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
+ mPreferenceGroup = (PreferenceGroup) screen.findPreference(getPreferenceKey());
+ mPreferenceGroup.setVisible(false);
+
if (isAvailable()) {
- mPreference = screen.findPreference(getPreferenceKey());
final Context context = screen.getContext();
mBluetoothDeviceUpdater.setPrefContext(context);
mSavedDockUpdater.setPreferenceContext(context);
@@ -69,7 +74,6 @@
public void onStart() {
mBluetoothDeviceUpdater.registerCallback();
mSavedDockUpdater.registerCallback();
- updatePreferenceOnSizeChanged();
}
@Override
@@ -86,13 +90,17 @@
@Override
public void onDeviceAdded(Preference preference) {
mPreferenceSize++;
- updatePreferenceOnSizeChanged();
+ if (mPreferenceSize <= MAX_DEVICE_NUM) {
+ mPreferenceGroup.addPreference(preference);
+ }
+ updatePreferenceVisiblity();
}
@Override
public void onDeviceRemoved(Preference preference) {
mPreferenceSize--;
- updatePreferenceOnSizeChanged();
+ mPreferenceGroup.removePreference(preference);
+ updatePreferenceVisiblity();
}
@VisibleForTesting
@@ -106,18 +114,12 @@
}
@VisibleForTesting
- void setPreferenceSize(int size) {
- mPreferenceSize = size;
+ void setPreferenceGroup(PreferenceGroup preferenceGroup) {
+ mPreferenceGroup = preferenceGroup;
}
@VisibleForTesting
- void setPreference(Preference preference) {
- mPreference = preference;
- }
-
- private void updatePreferenceOnSizeChanged() {
- if (isAvailable()) {
- mPreference.setEnabled(mPreferenceSize != 0);
- }
+ void updatePreferenceVisiblity() {
+ mPreferenceGroup.setVisible(mPreferenceSize > 0);
}
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
index fc08016..52b2e95 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/PreviouslyConnectedDevicePreferenceControllerTest.java
@@ -28,6 +28,9 @@
import android.content.pm.PackageManager;
import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceManager;
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.connecteddevice.dock.DockUpdater;
@@ -54,10 +57,12 @@
private DockUpdater mDockUpdater;
@Mock
private PackageManager mPackageManager;
+ @Mock
+ private PreferenceManager mPreferenceManager;
private Context mContext;
private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController;
- private Preference mPreference;
+ private PreferenceGroup mPreferenceGroup;
@Before
public void setUp() {
@@ -70,8 +75,10 @@
mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater);
- mPreference = new Preference(mContext);
- mPreConnectedDeviceController.setPreference(mPreference);
+ mPreferenceGroup = spy(new PreferenceCategory(mContext));
+ doReturn(mPreferenceManager).when(mPreferenceGroup).getPreferenceManager();
+ mPreferenceGroup.setVisible(false);
+ mPreConnectedDeviceController.setPreferenceGroup(mPreferenceGroup);
}
@Test
@@ -101,20 +108,34 @@
}
@Test
- public void onDeviceAdded_addFirstDevice_preferenceIsEnable() {
- doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
- mPreConnectedDeviceController.setPreferenceSize(0);
- mPreConnectedDeviceController.onDeviceAdded(mPreference);
+ public void onDeviceAdded_addDevicePreference_displayIt() {
+ mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
- assertThat(mPreference.isEnabled()).isTrue();
+ assertThat(mPreferenceGroup.isVisible()).isTrue();
+ assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
}
@Test
- public void onDeviceRemoved_removeLastDevice_preferenceIsDisable() {
- doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
- mPreConnectedDeviceController.setPreferenceSize(1);
- mPreConnectedDeviceController.onDeviceRemoved(mPreference);
+ public void onDeviceAdded_addFourDevicePreference_onlyDisplayThree() {
+ mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
+ mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
+ mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
+ mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
- assertThat(mPreference.isEnabled()).isFalse();
+ assertThat(mPreferenceGroup.isVisible()).isTrue();
+ assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(3);
}
+
+ @Test
+ public void onDeviceRemoved_removeLastDevice_setInvisible() {
+ final Preference preference = new Preference(mContext);
+ mPreferenceGroup.addPreference(preference);
+ mPreferenceGroup.setVisible(true);
+
+ mPreConnectedDeviceController.onDeviceRemoved(preference);
+
+ assertThat(mPreferenceGroup.isVisible()).isFalse();
+ assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(0);
+ }
+
}