Merge changes I44039704,Iee0de8a2

* changes:
  Use isConnected in CachedBluetoothDevice
  Update "Previous connected device" preference
This commit is contained in:
Lei Yu
2018-10-03 19:04:16 +00:00
committed by Android (Google) Code Review
8 changed files with 77 additions and 43 deletions

View File

@@ -414,6 +414,9 @@
<!-- Toast text for hint user bluetooth is turned on [CHAR LIMIT=none]--> <!-- Toast text for hint user bluetooth is turned on [CHAR LIMIT=none]-->
<string name="connected_device_bluetooth_turned_on_toast">Bluetooth turned on</string> <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 --> <!-- Date & time settings screen title -->
<string name="date_and_time">Date &amp; time</string> <string name="date_and_time">Date &amp; time</string>
<!-- The title of the activity to pick a time zone. --> <!-- The title of the activity to pick a time zone. -->

View File

@@ -41,18 +41,24 @@
settings:useAdminDisabledSummary="true" settings:useAdminDisabledSummary="true"
settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/> settings:controller="com.android.settings.connecteddevice.AddDevicePreferenceController"/>
<Preference <PreferenceCategory
android:key="previously_connected_devices" android:key="previously_connected_devices"
android:title="@string/connected_device_previously_connected_title" android:title="@string/connected_device_previously_connected_title"
android:icon="@drawable/ic_devices_other_black" settings:controller="com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceController">
android:fragment="com.android.settings.connecteddevice.PreviouslyConnectedDeviceDashboardFragment"
settings:allowDividerAbove="true" <Preference
settings:controller="com.android.settings.connecteddevice.PreviouslyConnectedDevicePreferenceController"/> 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 <Preference
android:key="connection_preferences" android:key="connection_preferences"
android:title="@string/connected_device_connections_title" android:title="@string/connected_device_connections_title"
android:fragment="com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment" android:fragment="com.android.settings.connecteddevice.AdvancedConnectedDeviceDashboardFragment"
settings:allowDividerAbove="true"
settings:controller="com.android.settings.connecteddevice.AdvancedConnectedDeviceController"/> settings:controller="com.android.settings.connecteddevice.AdvancedConnectedDeviceController"/>
</PreferenceScreen> </PreferenceScreen>

View File

@@ -269,8 +269,9 @@ public abstract class BluetoothDeviceUpdater implements BluetoothCallback,
final BluetoothDevice device = cachedDevice.getDevice(); final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) { if (DBG) {
Log.d(TAG, "isDeviceConnected() device name : " + cachedDevice.getName() + 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(); return device.getBondState() == BluetoothDevice.BOND_BONDED && cachedDevice.isConnected();
} }
} }

View File

@@ -43,9 +43,10 @@ public class SavedBluetoothDeviceUpdater extends BluetoothDeviceUpdater
final BluetoothDevice device = cachedDevice.getDevice(); final BluetoothDevice device = cachedDevice.getDevice();
if (DBG) { if (DBG) {
Log.d(TAG, "isFilterMatched() device name : " + cachedDevice.getName() + 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(); return device.getBondState() == BluetoothDevice.BOND_BONDED && !cachedDevice.isConnected();
} }
@Override @Override

View File

@@ -20,6 +20,7 @@ import android.content.pm.PackageManager;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.settings.bluetooth.BluetoothDeviceUpdater; import com.android.settings.bluetooth.BluetoothDeviceUpdater;
@@ -35,7 +36,9 @@ import com.android.settingslib.core.lifecycle.events.OnStop;
public class PreviouslyConnectedDevicePreferenceController extends BasePreferenceController public class PreviouslyConnectedDevicePreferenceController extends BasePreferenceController
implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback { implements LifecycleObserver, OnStart, OnStop, DevicePreferenceCallback {
private Preference mPreference; private static final int MAX_DEVICE_NUM = 3;
private PreferenceGroup mPreferenceGroup;
private BluetoothDeviceUpdater mBluetoothDeviceUpdater; private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
private DockUpdater mSavedDockUpdater; private DockUpdater mSavedDockUpdater;
private int mPreferenceSize; private int mPreferenceSize;
@@ -57,8 +60,10 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
@Override @Override
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
mPreferenceGroup = (PreferenceGroup) screen.findPreference(getPreferenceKey());
mPreferenceGroup.setVisible(false);
if (isAvailable()) { if (isAvailable()) {
mPreference = screen.findPreference(getPreferenceKey());
final Context context = screen.getContext(); final Context context = screen.getContext();
mBluetoothDeviceUpdater.setPrefContext(context); mBluetoothDeviceUpdater.setPrefContext(context);
mSavedDockUpdater.setPreferenceContext(context); mSavedDockUpdater.setPreferenceContext(context);
@@ -69,7 +74,6 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
public void onStart() { public void onStart() {
mBluetoothDeviceUpdater.registerCallback(); mBluetoothDeviceUpdater.registerCallback();
mSavedDockUpdater.registerCallback(); mSavedDockUpdater.registerCallback();
updatePreferenceOnSizeChanged();
} }
@Override @Override
@@ -86,13 +90,17 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
@Override @Override
public void onDeviceAdded(Preference preference) { public void onDeviceAdded(Preference preference) {
mPreferenceSize++; mPreferenceSize++;
updatePreferenceOnSizeChanged(); if (mPreferenceSize <= MAX_DEVICE_NUM) {
mPreferenceGroup.addPreference(preference);
}
updatePreferenceVisiblity();
} }
@Override @Override
public void onDeviceRemoved(Preference preference) { public void onDeviceRemoved(Preference preference) {
mPreferenceSize--; mPreferenceSize--;
updatePreferenceOnSizeChanged(); mPreferenceGroup.removePreference(preference);
updatePreferenceVisiblity();
} }
@VisibleForTesting @VisibleForTesting
@@ -106,18 +114,12 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
} }
@VisibleForTesting @VisibleForTesting
void setPreferenceSize(int size) { void setPreferenceGroup(PreferenceGroup preferenceGroup) {
mPreferenceSize = size; mPreferenceGroup = preferenceGroup;
} }
@VisibleForTesting @VisibleForTesting
void setPreference(Preference preference) { void updatePreferenceVisiblity() {
mPreference = preference; mPreferenceGroup.setVisible(mPreferenceSize > 0);
}
private void updatePreferenceOnSizeChanged() {
if (isAvailable()) {
mPreference.setEnabled(mPreferenceSize != 0);
}
} }
} }

View File

@@ -161,7 +161,7 @@ public class BluetoothDeviceUpdaterTest {
@Test @Test
public void isDeviceConnected_deviceConnected() { public void isDeviceConnected_deviceConnected() {
doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
doReturn(true).when(mBluetoothDevice).isConnected(); doReturn(true).when(mCachedBluetoothDevice).isConnected();
assertThat(mBluetoothDeviceUpdater.isDeviceConnected(mCachedBluetoothDevice)).isTrue(); assertThat(mBluetoothDeviceUpdater.isDeviceConnected(mCachedBluetoothDevice)).isTrue();
} }
@@ -169,7 +169,7 @@ public class BluetoothDeviceUpdaterTest {
@Test @Test
public void isDeviceConnected_deviceNotConnected() { public void isDeviceConnected_deviceNotConnected() {
doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
doReturn(false).when(mBluetoothDevice).isConnected(); doReturn(false).when(mCachedBluetoothDevice).isConnected();
assertThat(mBluetoothDeviceUpdater.isDeviceConnected(mCachedBluetoothDevice)).isFalse(); assertThat(mBluetoothDeviceUpdater.isDeviceConnected(mCachedBluetoothDevice)).isFalse();
} }

View File

@@ -77,7 +77,7 @@ public class SavedBluetoothDeviceUpdaterTest {
@Test @Test
public void update_filterMatch_addPreference() { public void update_filterMatch_addPreference() {
doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState(); doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
doReturn(false).when(mBluetoothDevice).isConnected(); doReturn(false).when(mCachedBluetoothDevice).isConnected();
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice); mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
@@ -87,7 +87,7 @@ public class SavedBluetoothDeviceUpdaterTest {
@Test @Test
public void update_filterNotMatch_removePreference() { public void update_filterNotMatch_removePreference() {
doReturn(BluetoothDevice.BOND_NONE).when(mBluetoothDevice).getBondState(); doReturn(BluetoothDevice.BOND_NONE).when(mBluetoothDevice).getBondState();
doReturn(true).when(mBluetoothDevice).isConnected(); doReturn(true).when(mCachedBluetoothDevice).isConnected();
mBluetoothDeviceUpdater.update(mCachedBluetoothDevice); mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
@@ -96,7 +96,7 @@ public class SavedBluetoothDeviceUpdaterTest {
@Test @Test
public void onProfileConnectionStateChanged_deviceConnected_removePreference() { public void onProfileConnectionStateChanged_deviceConnected_removePreference() {
when(mBluetoothDevice.isConnected()).thenReturn(true); when(mCachedBluetoothDevice.isConnected()).thenReturn(true);
mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice, mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP); BluetoothProfile.STATE_CONNECTED, BluetoothProfile.A2DP);
@@ -106,7 +106,7 @@ public class SavedBluetoothDeviceUpdaterTest {
@Test @Test
public void onProfileConnectionStateChanged_deviceDisconnected_addPreference() { public void onProfileConnectionStateChanged_deviceDisconnected_addPreference() {
when(mBluetoothDevice.isConnected()).thenReturn(false); when(mCachedBluetoothDevice.isConnected()).thenReturn(false);
mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice, mBluetoothDeviceUpdater.onProfileConnectionStateChanged(mCachedBluetoothDevice,
BluetoothProfile.STATE_DISCONNECTED, BluetoothProfile.A2DP); BluetoothProfile.STATE_DISCONNECTED, BluetoothProfile.A2DP);

View File

@@ -28,6 +28,9 @@ import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import androidx.preference.Preference; 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.bluetooth.BluetoothDeviceUpdater;
import com.android.settings.connecteddevice.dock.DockUpdater; import com.android.settings.connecteddevice.dock.DockUpdater;
@@ -54,10 +57,12 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
private DockUpdater mDockUpdater; private DockUpdater mDockUpdater;
@Mock @Mock
private PackageManager mPackageManager; private PackageManager mPackageManager;
@Mock
private PreferenceManager mPreferenceManager;
private Context mContext; private Context mContext;
private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController; private PreviouslyConnectedDevicePreferenceController mPreConnectedDeviceController;
private Preference mPreference; private PreferenceGroup mPreferenceGroup;
@Before @Before
public void setUp() { public void setUp() {
@@ -70,8 +75,10 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater); mPreConnectedDeviceController.setBluetoothDeviceUpdater(mBluetoothDeviceUpdater);
mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater); mPreConnectedDeviceController.setSavedDockUpdater(mDockUpdater);
mPreference = new Preference(mContext); mPreferenceGroup = spy(new PreferenceCategory(mContext));
mPreConnectedDeviceController.setPreference(mPreference); doReturn(mPreferenceManager).when(mPreferenceGroup).getPreferenceManager();
mPreferenceGroup.setVisible(false);
mPreConnectedDeviceController.setPreferenceGroup(mPreferenceGroup);
} }
@Test @Test
@@ -101,20 +108,34 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
} }
@Test @Test
public void onDeviceAdded_addFirstDevice_preferenceIsEnable() { public void onDeviceAdded_addDevicePreference_displayIt() {
doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
mPreConnectedDeviceController.setPreferenceSize(0);
mPreConnectedDeviceController.onDeviceAdded(mPreference);
assertThat(mPreference.isEnabled()).isTrue(); assertThat(mPreferenceGroup.isVisible()).isTrue();
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
} }
@Test @Test
public void onDeviceRemoved_removeLastDevice_preferenceIsDisable() { public void onDeviceAdded_addFourDevicePreference_onlyDisplayThree() {
doReturn(true).when(mPackageManager).hasSystemFeature(PackageManager.FEATURE_BLUETOOTH); mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
mPreConnectedDeviceController.setPreferenceSize(1); mPreConnectedDeviceController.onDeviceAdded(new Preference(mContext));
mPreConnectedDeviceController.onDeviceRemoved(mPreference); 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);
}
} }