Merge "Fix settings crash" into rvc-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
19af143fe7
@@ -96,7 +96,6 @@ public final class BluetoothDevicePreference extends GearPreference implements
|
||||
}
|
||||
|
||||
mCachedDevice = cachedDevice;
|
||||
mCachedDevice.registerCallback(this);
|
||||
mCurrentTime = System.currentTimeMillis();
|
||||
mType = type;
|
||||
|
||||
@@ -127,13 +126,24 @@ public final class BluetoothDevicePreference extends GearPreference implements
|
||||
@Override
|
||||
protected void onPrepareForRemoval() {
|
||||
super.onPrepareForRemoval();
|
||||
mCachedDevice.unregisterCallback(this);
|
||||
if (mDisconnectDialog != null) {
|
||||
mDisconnectDialog.dismiss();
|
||||
mDisconnectDialog = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAttached() {
|
||||
super.onAttached();
|
||||
mCachedDevice.registerCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetached() {
|
||||
super.onDetached();
|
||||
mCachedDevice.unregisterCallback(this);
|
||||
}
|
||||
|
||||
public CachedBluetoothDevice getBluetoothDevice() {
|
||||
return mCachedDevice;
|
||||
}
|
||||
|
@@ -51,14 +51,15 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
|
||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
private static final int MAX_DEVICE_NUM = 3;
|
||||
private static final int DOCK_DEVICE_INDEX = 9;
|
||||
private static final String KEY_SEE_ALL = "previously_connected_devices_see_all";
|
||||
|
||||
private final List<Preference> mDevicesList = new ArrayList<>();
|
||||
private final List<Preference> mDockDevicesList = new ArrayList<>();
|
||||
|
||||
private PreferenceGroup mPreferenceGroup;
|
||||
private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
|
||||
private DockUpdater mSavedDockUpdater;
|
||||
private int mPreferenceSize;
|
||||
private BluetoothAdapter mBluetoothAdapter;
|
||||
|
||||
@VisibleForTesting
|
||||
@@ -126,33 +127,38 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
|
||||
|
||||
@Override
|
||||
public void onDeviceAdded(Preference preference) {
|
||||
mPreferenceSize++;
|
||||
final List<BluetoothDevice> bluetoothDevices =
|
||||
mBluetoothAdapter.getMostRecentlyConnectedDevices();
|
||||
final int index = bluetoothDevices.indexOf(((BluetoothDevicePreference) preference)
|
||||
.getBluetoothDevice().getDevice());
|
||||
final int index = preference instanceof BluetoothDevicePreference
|
||||
? bluetoothDevices.indexOf(((BluetoothDevicePreference) preference)
|
||||
.getBluetoothDevice().getDevice()) : DOCK_DEVICE_INDEX;
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "onDeviceAdded() " + preference.getTitle() + ", index of : " + index);
|
||||
for (BluetoothDevice device : bluetoothDevices) {
|
||||
Log.d(TAG, "onDeviceAdded() most recently device : " + device.getName());
|
||||
}
|
||||
}
|
||||
if (mPreferenceSize <= MAX_DEVICE_NUM) {
|
||||
addPreference(mPreferenceSize, index, preference);
|
||||
} else {
|
||||
addPreference(MAX_DEVICE_NUM, index, preference);
|
||||
}
|
||||
addPreference(index, preference);
|
||||
updatePreferenceVisibility();
|
||||
}
|
||||
|
||||
private void addPreference(int size, int index, Preference preference) {
|
||||
if (mDevicesList.size() >= index) {
|
||||
mDevicesList.add(index, preference);
|
||||
private void addPreference(int index, Preference preference) {
|
||||
if (preference instanceof BluetoothDevicePreference) {
|
||||
if (mDevicesList.size() >= index) {
|
||||
mDevicesList.add(index, preference);
|
||||
} else {
|
||||
mDevicesList.add(preference);
|
||||
}
|
||||
} else {
|
||||
mDevicesList.add(preference);
|
||||
mDockDevicesList.add(preference);
|
||||
}
|
||||
addPreference();
|
||||
}
|
||||
|
||||
private void addPreference() {
|
||||
mPreferenceGroup.removeAll();
|
||||
mPreferenceGroup.addPreference(mSeeAllPreference);
|
||||
final int size = getDeviceListSize();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "addPreference() add device : " + mDevicesList.get(i).getTitle());
|
||||
@@ -160,23 +166,37 @@ public class PreviouslyConnectedDevicePreferenceController extends BasePreferenc
|
||||
mDevicesList.get(i).setOrder(i);
|
||||
mPreferenceGroup.addPreference(mDevicesList.get(i));
|
||||
}
|
||||
if (mDockDevicesList.size() > 0) {
|
||||
for (int i = 0; i < getDockDeviceListSize(MAX_DEVICE_NUM - size); i++) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "addPreference() add dock device : "
|
||||
+ mDockDevicesList.get(i).getTitle());
|
||||
}
|
||||
mDockDevicesList.get(i).setOrder(DOCK_DEVICE_INDEX);
|
||||
mPreferenceGroup.addPreference(mDockDevicesList.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int getDeviceListSize() {
|
||||
return mDevicesList.size() >= MAX_DEVICE_NUM
|
||||
? MAX_DEVICE_NUM : mDevicesList.size();
|
||||
}
|
||||
|
||||
private int getDockDeviceListSize(int availableSize) {
|
||||
return mDockDevicesList.size() >= availableSize
|
||||
? availableSize : mDockDevicesList.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDeviceRemoved(Preference preference) {
|
||||
mPreferenceSize--;
|
||||
mDevicesList.remove(preference);
|
||||
mPreferenceGroup.removeAll();
|
||||
mPreferenceGroup.addPreference(mSeeAllPreference);
|
||||
final int size = mDevicesList.size() >= MAX_DEVICE_NUM
|
||||
? MAX_DEVICE_NUM : mDevicesList.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "onDeviceRemoved() add device : " + mDevicesList.get(i).getTitle());
|
||||
}
|
||||
mDevicesList.get(i).setOrder(i);
|
||||
mPreferenceGroup.addPreference(mDevicesList.get(i));
|
||||
if (preference instanceof BluetoothDevicePreference) {
|
||||
mDevicesList.remove(preference);
|
||||
} else {
|
||||
mDockDevicesList.remove(preference);
|
||||
}
|
||||
|
||||
addPreference();
|
||||
updatePreferenceVisibility();
|
||||
}
|
||||
|
||||
|
@@ -41,6 +41,7 @@ import com.android.settings.bluetooth.BluetoothDeviceUpdater;
|
||||
import com.android.settings.connecteddevice.dock.DockUpdater;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
|
||||
import com.android.settings.widget.SingleTargetGearPreference;
|
||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||
|
||||
import org.junit.Before;
|
||||
@@ -187,6 +188,16 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
|
||||
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onDeviceAdded_addDockDevicePreference_displayIt() {
|
||||
final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
|
||||
mContext, null /* AttributeSet */);
|
||||
|
||||
mPreConnectedDeviceController.onDeviceAdded(dockPreference);
|
||||
|
||||
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onDeviceAdded_addFourDevicePreference_onlyDisplayThree() {
|
||||
final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(
|
||||
@@ -197,11 +208,14 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
|
||||
mContext, mCachedDevice3, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
|
||||
final BluetoothDevicePreference preference4 = new BluetoothDevicePreference(
|
||||
mContext, mCachedDevice4, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
|
||||
final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
|
||||
mContext, null /* AttributeSet */);
|
||||
|
||||
mPreConnectedDeviceController.onDeviceAdded(preference1);
|
||||
mPreConnectedDeviceController.onDeviceAdded(preference2);
|
||||
mPreConnectedDeviceController.onDeviceAdded(preference3);
|
||||
mPreConnectedDeviceController.onDeviceAdded(preference4);
|
||||
mPreConnectedDeviceController.onDeviceAdded(dockPreference);
|
||||
|
||||
// 3 BluetoothDevicePreference and 1 see all preference
|
||||
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(4);
|
||||
@@ -211,9 +225,13 @@ public class PreviouslyConnectedDevicePreferenceControllerTest {
|
||||
public void onDeviceRemoved_removeLastDevice_showSeeAllPreference() {
|
||||
final BluetoothDevicePreference preference1 = new BluetoothDevicePreference(
|
||||
mContext, mCachedDevice1, true, BluetoothDevicePreference.SortType.TYPE_NO_SORT);
|
||||
final SingleTargetGearPreference dockPreference = new SingleTargetGearPreference(
|
||||
mContext, null /* AttributeSet */);
|
||||
mPreferenceGroup.addPreference(preference1);
|
||||
mPreferenceGroup.addPreference(dockPreference);
|
||||
|
||||
mPreConnectedDeviceController.onDeviceRemoved(preference1);
|
||||
mPreConnectedDeviceController.onDeviceRemoved(dockPreference);
|
||||
|
||||
assertThat(mPreferenceGroup.getPreferenceCount()).isEqualTo(1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user